곧 생방송으로 웹 사이트를 구축하고 SQL 인젝션 방지에 대한 몇 가지 질문이 있지만 mysqli_real_escape_string
을 사용하는 방법을 이해하지만 그걸 사용해야하는지 궁금합니다. 내 모든 SQL 문에 대한 변수를 가져오고 선택 문을 사용하고 있거나 그냥 삽입 및 업데이트 및 삭제를 할 때 사용해야합니까? 또한 어떤 보안에 대해서도 사전에 감사드립니다.PHP MySQLI SQL 인젝션 방지
답변
모든 쿼리는 읽기 또는 쓰기, 영구적 또는 일시적으로 주입 할 수 있습니다. 삽입은 하나의 쿼리를 끝내고 별도의 쿼리를 실행하여 수행 할 수 있습니다 (mysqli
가능). 의도 한 쿼리와 관련성이 떨어집니다.
외부 소스의 쿼리에 대한 입력이 사용자 또는 내부 쿼리인지 여부는 쿼리의 인수 및 쿼리 컨텍스트의 매개 변수로 간주해야합니다. 쿼리의 매개 변수는 매개 변수화해야합니다. 이것은 적절한 매개 변수화 된 쿼리로 연결되며,이 쿼리를 통해 준비된 명령문을 만들고 인수를 사용하여 실행할 수 있습니다. 예 :
SELECT col1 FROM t1 WHERE col2 = ?
?
은 매개 변수의 자리 표시 자입니다. mysqli
을 사용하면 prepare
을 사용하여 준비된 문을 만들고 bind_param
을 사용하여 매개 변수에 변수 (인수)를 바인딩 한 다음 execute
과 함께 쿼리를 실행할 수 있습니다. 당신은 논쟁을 전혀 없앨 필요가 없습니다 (사실 그렇게하는 것이 해 롭습니다). mysqli
이 귀하를 대신합니다.전체 과정은 다음과 같습니다 매개 변수화 된 쿼리 및 준비된 명령문 사이에 중요한 차이점도 있습니다
$stmt = mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");
$stmt->bind_param("s", $col2_arg);
$stmt->execute();
.
$stmt = mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");
이 요약 :
- 모든 쿼리가 제대로 매개 변수화해야한다 (그들은 어떤 매개 변수가없는 한) 이 문장은, 준비하면서, 매개 변수화하지 않고 주입하여 취약
- 모두 쿼리에 대한 인수는 소스에 관계없이 가능한 한 적대적인 것으로 처리되어야합니다
임의의 수의 요소로 IN 또는 SET 절과 함께이 마법 문을 사용하는 방법을 보여 주면 좋을 것입니다. . 그렇지 않으면 화면에 쉽게 표시되지만 집에서는 사용할 수 없게됩니다. –
@YourCommonSense 나는이 질문의 범위를 벗어났다.하지만 나는이 대답과 같은 것을하는 경향이있다 : http://stackoverflow.com/a/10698906/454533 –
매우 상세한 답변을 해주셔서 감사합니다! 이것은 mysqli_real_escape_string을 사용하는 것보다 더 나은 해결책 인 것 같습니다. 조금 더 자세히 살펴보고 구현해 드리겠습니다. 정말 고마워요! – user2201765
그것은 초 만에 종료됩니다, 그러나 다만 일을하기 위해 바로
난 당신이하지 두려워
mysqli_real_escape_string 사용하는 방법을 이해합니다.
내가 내 SQL 문
확실히
하지 않는군요 모든 변수에 그것을 사용하는 경우.
이 기능은
내가 삽입 업데이트에도하거나 선택 진술을하고있을 때 그것을 사용하고 삭제해야합니까 SQL 문자열을 포맷하는 데 사용되어야한다?
ny SQL 문. 그러나 다시,하지 "mysqli_real_escape_string를 사용하여"하지만
은 또한 어떤 다른 보안 것은 당신이
에 대한 SQL 보안을 추천 할 것입니다
제대로 완전히 리터럴를 포맷하고 - 제대로 문자열하지만 의 리터럴뿐만 아니라 포맷해야 어떤 종류. 그리고 각기 다른 서식 규칙 집합이 필요합니다.이것은 답변이 아닙니다. 그것을 제거하십시오. 함수 자체에 관해서는 그것을 사용하는 방법을 이해하고 있습니다. 나는 그것을 사용하기 위해 필요한 모든 것에 정확히 100 %가 아닙니다. – user2201765
이 답변을 개선하십시오. "당신은 포맷해야합니다 ..."라는 의미입니다. 예제 나 규칙 등을주세요. – Chiwda
@Chiwda 여기 있습니다 : https://phpdelusions.net/sql_injection#formatting –
- 1. SQL 인젝션 공격 방지
- 2. SQL 인젝션 방지
- 3. 블라인드 SQL 인젝션 방지
- 4. SQL 인젝션 방지
- 5. PHP/MySQL 인젝션 방지
- 6. if/else로 SQL 인젝션 방지
- 7. 오래된 SQL 인젝션 방지 프로그램?
- 8. PHP - SQL 인젝션
- 9. SQL 인젝션 방지 및 레일의 데이터 변환은
- 10. SQL 인젝션/굿 루비 방지 방법
- 11. SQL 인젝션 방지하여 오류 페이지
- 12. SQL 인젝션 로그인 우회
- 13. SQL 인젝션 수수께끼
- 14. 블라인드 SQL 인젝션
- 15. PHP 매직 퀀트에도 불구하고 성공적인 SQL 인젝션
- 16. SQL 인젝션 필터 URL 쿼리 문자열 - PHP
- 17. SQL 인젝션 공격 테스트하기
- 18. 이 코드가 SQL 인젝션 (파이썬)을 방지 할 수
- 19. PHP와 젠드 프레임 워크로 SQL 인젝션 방지 - 어떻게?
- 20. SQL (PHP MySQLi) 구문 오류
- 21. EJB3 SQL 인젝션
- 22. SQL 인젝션 새로운 익스플로잇
- 23. SQL 인젝션 + PDO_MySQL = 위험
- 24. SQL 인젝션 해킹 시도
- 25. SQL 인젝션 도구
- 26. 중지 SQL 인젝션
- 27. SQL 인젝션 도움이 필요합니다
- 28. 않도록 SQL 인젝션
- 29. 레일 올바른 SQL 인젝션
- 30. SQL 인젝션 취약성에이
제 질문은 일반적인 SQL 주입과 관련된 질문 인 mysqli_real_escape_string과 관련이 있습니다 ... – user2201765
이 질문은 종료되어서는 안됩니다. 그것은 mysqli에 특유한 것이며 검열 관이 제공 한 링크에서 답변을 얻지 못했습니다. –
@JG Estiot - 잘 말하면, 너무 많은 항문 코더 - 남자는 도움이 필요합니다. 그래서 그를 도와주세요. 왜 대답하기를 원하지 않는지 설명하기보다는 대답하기 위해 노력하지 않습니다! 나는 당신과 동의한다 – kerry