다음은 주제에 대한 저의 견해입니다.
동적 SQL 문자열을 사용하는 경우 올바르게 작동하는 이스케이프 기능이 필요합니다. 데이터 값이 탈출하고 나면
http://dev.mysql.com/doc/refman/5.0/en/news-5-0-22.html
, SQL 문자열 구문 분석하고 데이터베이스에 의해 컴파일 될 수있다 :이 (틀림없이) 이전의 예에서 볼 수 있듯이 불행하게도,이 경우는 항상 아닙니다 섬기는 사람. 이스케이프 기능이 제대로 작동하지 않거나 영리한 새 SQL 주입 공격이 발견되면 서버에서 SQL 문에 대한 데이터를 실수로 범할 가능성이 있습니다.
매개 변수와 함께 prepared statement를 사용하면 명령문은 먼저 구문 분석되고 컴파일됩니다. 데이터 값은 실행될 때 컴파일 된 명령문과 결합됩니다. 이렇게하면 SQL 로직이 데이터 값과 분리되므로 두 개를 혼동하지 않아야합니다.이 발생하지 않아야합니다.
예, 그렇습니다. mysqli_real_escape_string
을 없앨 수는 있지만, 매개 변수가있는 준비된 문을 사용하면 SQL 삽입이 불가능하다고 말할 수 있습니다. 버그 수정이 훨씬 더 어려워 지지만, mysqli_real_escape_string
버그와 마찬가지로 아직 발견되지 않은 (또는 새로 생성 된) 버그로 인해 불가능 해 보이는 가능성이 항상 존재한다고 생각합니다.
예, 자세한 내용은 http://www.sjmp.de/php/php-mysql-mehr-sicherheit-und-erhoehte-performance-durch-mysqli-und-prepared-statements/을 참조하십시오. – Tobias