我在Python中有一些代码在sqlite DB中设置char(80)值。
该字符串是通过文本输入字段直接从用户获取的,并使用JSON结构中的POST方法发送回服务器。
在服务器端,我当前将字符串传递给调用SQL UPDATE操作的方法。
它有效,但我知道它根本不安全。
我希望客户端无论如何都是不安全的,因此任何保护都应放在服务器端。我可以做些什么来再次保护UPDATE操作SQL注入?
一个可以“引用”文本的函数,以便它不会混淆SQL解析器,这正是我正在寻找的。我希望这样的功能存在,但找不到它。
修改 这是我当前设置char字段名称标签的代码:
def setLabel( self, userId, refId, label ):
self._db.cursor().execute( """
UPDATE items SET label = ? WHERE userId IS ? AND refId IS ?""", ( label, userId, refId) )
self._db.commit()
答案 0 :(得分:7)
来自文档:
con.execute("insert into person(firstname) values (?)", ("Joe",))
这会逃脱"Joe"
,所以你想要的是
con.execute("insert into person(firstname) values (?)", (firstname_from_client,))
答案 1 :(得分:2)
DB-API的.execute()
支持参数替换,它将为您提供转义,它在文档的顶部附近提到; <{3>}以上从不这样做 - 不安全。
答案 2 :(得分:0)
Noooo ...使用BIND VARIABLES!这就是他们的目的。见this
该技术的另一个名称是parameterized sql(我认为“绑定变量”可能是Oracle特别使用的名称。)