是來自MySQL的
MATCH
也容易受到注入攻擊? 例如:MySQL中的Python,MATCH和注入攻擊"""SELECT * FROM myTable WHERE MATCH(myColumnName) AGAINST(%s) ORDER BY id LIMIT 20""" % query
似乎允許任意的字符串,這很糟糕。
如果是這樣,我已經改爲設法 - 按照Python文檔的例子 -
t = (query,) statement = """SELECT * FROM myTable WHERE MATCH(myColumnName) AGAINST(?) ORDER BY id LIMIT 20""" cursor.execute(statement, t)
但不返回任何 - 即使串
query
在上述(1)返回命中。這是爲什麼?2),使用佔位符
%s
代替?
返回結果。爲什麼這比1)更安全(如果有的話)?例如。與查詢字符串我可以隨時關閉一個字符串和括號query=')...'
並繼續query=') OR otherColumnName LIKE '%hello%' --
。
因此,是否足以去除除羅馬字符或數字之外的所有內容的查詢字符串?
使用上面準備好的查詢 - 使用'?'確保字符串在需要時被視爲引用/轉義。 – viraptor
[樣本](http://sscce.org/)不完整。在2.中,查詢的價值是什麼?你期望它匹配什麼?請注意,雖然在示例中無關緊要,但不要使用['SELECT *'](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)在生產代碼中;只選擇你需要的列。 – outis
碰巧,我需要表中的所有列。我可以通過命名所有列來拼出相同的結果。 – SK9