2012-05-15 2 views
-1

정규 표현식에 문제가 있습니다.어떻게 정규식을 사용하여 drop, truncate 등의 명령에서 쿼리를 스캔합니까?

쿼리 문자열에 preg_match를 사용하려고합니다. 나는 그것이 순서와 두 기호 사이의 문자의 번호를 가지고 '간 또는 ` 및 인 경우 (? I)에 관계없이 드롭 또는 잘라 내기의 순서를 제외하고 싶지만, 내가 원하는 두 표지 사이에 있지 않은 두 단어를 잡으려고

아직 짐작하지 못했다면, 입력이 DROP | TRUNCATE는 아무것도하지 만 악의적이지 않은 입력으로부터 단어를 제외하지 않으면 쉽게 할 수 없습니다.

나는이 트리거되지 원하는 :

SELECT * FROM `drop` 
SELECT * FROM 'drop_truncate' -- drop drop 

을하지만이 트리거 :

DROP TABLE `users` 

편집 : 그래서 제 질문은 정규 표현식에 대해이었고, 나는 의심의 여지가, 데이터베이스 보안에 대한 답변을받지 오해의 소지가있는 것을 유감으로 생각하게 만드는 질문에 관한 것입니다! 아니요, 이미 처리 한 데이터베이스 보안에 대해서는별로 신경 쓰지 않습니다. 여기에 원하는 것은 드롭 또는 자름을 사용하고 어딘가에서 로그하는 의도를 확인하는 것입니다. 한숨

+5

실제 해결책은 사용자 입력을 그대로 사용하지 않고 실행하는 것입니다. 당신은 정규식을 찾고 있지 않다. 사용자 입력을 받아 위험한 것을하지 않는 쿼리를 만들 수있는 방법을 찾고있다. (단지 DROP와 TRUNCATE 이상으로 걱정할 필요가있다.) - 왜이 질문을해야 하는가? ? 진짜 질문을하십시오. –

+1

사용자가 제출 한 SQL을 데이터베이스에 공급하고 있습니까? – AD7six

+0

사용자가 무언가를 할 수 없으면 데이터베이스는 적절한 사용 권한을 사용하여이를 방지해야합니다. – Brian

답변

관련 문제