-1
정규 표현식에 문제가 있습니다.어떻게 정규식을 사용하여 drop, truncate 등의 명령에서 쿼리를 스캔합니까?
쿼리 문자열에 preg_match를 사용하려고합니다. 나는 그것이 순서와 두 기호 사이의 문자의 번호를 가지고 '간 또는 ` 및 인 경우 (? I)에 관계없이 드롭 또는 잘라 내기의 순서를 제외하고 싶지만, 내가 원하는 두 표지 사이에 있지 않은 두 단어를 잡으려고
아직 짐작하지 못했다면, 입력이 DROP | TRUNCATE는 아무것도하지 만 악의적이지 않은 입력으로부터 단어를 제외하지 않으면 쉽게 할 수 없습니다.
나는이 트리거되지 원하는 :
SELECT * FROM `drop`
SELECT * FROM 'drop_truncate' -- drop drop
을하지만이 트리거 :
DROP TABLE `users`
편집 : 그래서 제 질문은 정규 표현식에 대해이었고, 나는 의심의 여지가, 데이터베이스 보안에 대한 답변을받지 오해의 소지가있는 것을 유감으로 생각하게 만드는 질문에 관한 것입니다! 아니요, 이미 처리 한 데이터베이스 보안에 대해서는별로 신경 쓰지 않습니다. 여기에 원하는 것은 드롭 또는 자름을 사용하고 어딘가에서 로그하는 의도를 확인하는 것입니다. 한숨
실제 해결책은 사용자 입력을 그대로 사용하지 않고 실행하는 것입니다. 당신은 정규식을 찾고 있지 않다. 사용자 입력을 받아 위험한 것을하지 않는 쿼리를 만들 수있는 방법을 찾고있다. (단지 DROP와 TRUNCATE 이상으로 걱정할 필요가있다.) - 왜이 질문을해야 하는가? ? 진짜 질문을하십시오. –
사용자가 제출 한 SQL을 데이터베이스에 공급하고 있습니까? – AD7six
사용자가 무언가를 할 수 없으면 데이터베이스는 적절한 사용 권한을 사용하여이를 방지해야합니다. – Brian