我想注入这个字符串 - 以便它将表 foo 中的文本更新为文件中的红色文本(我不在乎它如何处理以前的 delete 语句)
"1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\');"-- "
到 Python 代码中,其中 id 设置为我的字符串:(这无法更改,因为它是给定的)
"DELETE FROM bar WHERE user_id = '%s' and bar_id = '%s';"%(str(user_id), str(id))
编辑:它的工作原理是这样的(没有最后一个引号和 #- 而不是 --):"1\';更新 foo SET 文本 = LOAD_FILE(\'/something/something.txt\');#- "
你不需要反斜杠,如果 id 是整数,你也不需要 '.你应该像这样重写它:
"DELETE FROM bar WHERE user_id = '%s' and bar_id = '%s';"%(str(user_id), str(id))
并且您应该使用预准备语句来避免 sql 注入。你可以像这样使用准备好的语句(在这个语句中,你必须去掉')
cursor.execute("DELETE FROM bar WHERE user_id = %s and bar_id = %s;",(str(user_id), str(id),))
编辑如果您执行以下操作:
x="1'; UPDATE foo SET text = LOAD_FILE('/something/something.txt'); --"
y="DELETE FROM bar WHERE user_id = '%s' and bar_id = '%s" % (2,x)
你在 y 中得到的是
DELETE FROM bar WHERE user_id = '2' and bar_id = '1'; UPDATE foo SET text = LOAD_FILE('/something/something.txt'); --
它的工作原理是这样的(没有最后一个引号和 #- 而不是 --):
"1'; UPDATE foo SET text = LOAD_FILE('/something/something.txt'); #- "