2009-12-22 4 views
2

PDO의 준비된 문이 실제로 보안을 강화하는지 또는 쿼리에서 "값싼"텍스트 대체인지 ​​궁금합니다. 매개 변수로 삽입됩니다 그 어떤 실제로 준비된 명령문의 요점은, 아무 효과가 없습니다 때문에 매개 변수PDO에서 준비된 진술은 실제로 보안을 강화합니까?

"'; DROP TABLE foobar;" 

같은 지침 자체의 일환으로 DBMS에 의해 해석되지 않고 쿼리를 중단하지 않습니다. 누구든지이 점을 자세히 알고 있습니까? 필자는 SQL 삽입 방지를 위해 준비된 문으로 PDO를 사용하려고 생각했습니다. 그들이 사용하기가 어렵다는 것 (그리고 심지어는 내 로컬 컴퓨터에서 작동하지도 않음)이 밝혀 지므로 PDO로 훨씬 많은 시간을 낭비하기 전에 이것을 찾아야합니다 .-)

+2

http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html –

+0

Google이이 질문에 대답 한 이전 SO 질문을 표시하면서 투표를 종료했습니다. – si618

+0

세미콜론을 "쿼리 스태킹 (tag stacking)"이라고 부른 다음 끝에 다른 문을 추가하는 예가 있습니다. 쿼리 스태킹은 특정 언어 모듈을 사용할 때 일부 DBMS에서만 작동하며 보편적이지 않습니다. 보편적 인 것은 AND, OR, UNION, ORDER BY 등과 같은 SQL 키워드를 통해 기존 쿼리에 SQL의 새로운 비트를 추가하는 것입니다. – Cheekysoft

답변

11

준비된 문을 작성하면 서버와 구문 분석을 위해 query-with-wildcards가 서버로 보내지고 해당 문을 호출하는 토큰이 반환됩니다.

호출에는 모든 매개 변수에 바인딩 된 데이터를 보내는 작업 만 포함됩니다. 즉, 쿼리 문자열의 일부가 아니기 때문에 데이터 구문 분석이 수행되지 않으며 준비된 문이 구문 분석되고 삽입으로 변경 될 수없는 경우 쿼리 구조가 고정된다는 의미입니다.

예, 준비된 진술은 확실히 안전성을 높입니다.

또한 여러 요청에 대해 준비된 문을 다시 사용하는 경우 구문 분석 오버 헤드가 발생할 필요가 없음을 의미합니다.

+0

간단하게, 준비된 진술 또는 어떤 종류의 "Parameterised Statements"도 사용자의 데이터가 데이터로 취급되고 코드로 취급되지 않도록 보장합니다. – Cheekysoft

3

예, 그들은 증가합니다 보안. PDO 나 MySQLi는 데이터가보다 콤팩트 한 형태로 전달되기 때문에 PHP의 일반적인 MYSQL 메소드에 비해 속도가 향상됩니다.

관련 문제