python - OperationalError: (1292, '截断不正确的 DOUBLE 值:\'1\'; UPDATE foo SET text = LOAD_FILE(\'/something/something.txt\');"-- \' ')
问题描述
我想注入这个字符串 - 以便它将表 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\'; UPDATE foo SET text = 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'); --
推荐阅读
- azure-active-directory - GraphAPI Schema Extensions 不会出现在消息中
- python - 无法验证游戏中的用户输入
- textview - SwiftUI:当我点击离开而不是按 Return 时触发 onCommit
- javascript - 无法读取未定义的属性“offsetTop”
- ios - 如何为 SwiftUI 列表中的多行删除过渡设置动画?
- angular - Mat-icon:当按下一个按钮时,所有的图标都会改变
- php - Laravel 政策:如何做出“代表”行为
- haskell - 如何在 Haskell 中通过选择之间的状态从“m”备选方案中概括选择大小为“n”的子集
- html - 在模态中添加和获取选中的复选框
- python - JSON 文件每行打印一个字符