2010-04-29 5 views
10

필자는 매직 쿼츠가 SQL 인젝션을 전혀 중단시키지 않는다는 것을 항상 읽었지만, 왜 그런지 이해할 수는 없습니다! 사용자 입력이 $x=' OR 1=1 --을 만드는 경우, 쿼리가 될 것이다, 지금PHP 매직 퀀트에도 불구하고 성공적인 SQL 인젝션

SELECT * FROM tablename 
    WHERE email='$x'; 

:

SELECT * FROM tablename 
    WHERE email='\' OR 1=1 --'; 
백 슬래시가 마법으로 추가됩니다

더와 인용하지 예를 들어, 이제 우리는 다음과 같은 쿼리가 있다고 가정 해 보자 파괴는 끝났어!

여기에 사용자가 Magic Quote 삽입을 무시할 수있는 곳이 보이지 않는가요?

답변

21

일반적으로 트릭은 이진 값을 전달하여 백 슬래시가 유효한 멀티 바이트 문자의 일부가되도록합니다. 그것에 대해 blog post 있습니다.

+0

나는 SQL 인젝션이 스크립트에서 거의 모든 초보자 시도에 영향을 줄 수있는보다 심각한 문제라고 항상 생각했다. 멀티 바이트 문자셋을 사용하지 않았다면 마술 따옴표로 절대적으로 안전하다고 믿을 수는 없습니다. –