MATCH
은 또한 공격에 취약합니다. 예를 들어 :MySQL의 Python, MATCH 및 인젝션 공격"""SELECT * FROM myTable WHERE MATCH(myColumnName) AGAINST(%s) ORDER BY id LIMIT 20""" % query
나쁜 보이는 임의의 문자열을 허용 할 것으로 보인다. 파이썬 문서의 예는 다음 - -
t = (query,) statement = """SELECT * FROM myTable WHERE MATCH(myColumnName) AGAINST(?) ORDER BY id LIMIT 20""" cursor.execute(statement, t)
을하지만 아무 것도 반환하지 않습니다 -
는 그렇다면, 내가 대신 해봤 문자열
query
(1) 호에 안타를 반환하는 경우에도. 왜 그런가요?)에서 대신 자리 표시 자
%s
을 사용하면 결과가 반환됩니다. 이것은 1)보다 안전합니다 (전혀 없다면)? 예 : 쿼리 문자열을 사용하면 항상query=')...'
이라는 문자열과 괄호를 닫고query=') OR otherColumnName LIKE '%hello%' --
을 계속 사용할 수 있습니다.
따라서 로마 문자 또는 숫자를 제외하고 모든 쿼리 문자열을 제거하는 것으로 충분합니까?
위와 같이 준비된 쿼리를 '?'와 함께 사용하면 문자열이 필요할 때 인용/이스케이프 처리됩니다. – viraptor
[샘플] (http://sscce.org/)이 완전하지 않습니다. 2.에서'query'의 값은 무엇입니까? 일치하는 행이 무엇입니까? 샘플에서는 중요하지 않지만 ['SELECT *'] (http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)는 사용하지 마십시오. 생산 코드에서; 필요한 열만 선택하십시오. – outis
그런데 테이블의 모든 열이 필요합니다. 필자는 모든 컬럼의 이름을 지정하여 이와 동일한 철자를 지정할 수 있습니다. – SK9