我有一些 Python 代码在 sqlite 数据库中设置 char(80) 值。
该字符串直接从用户通过文本输入字段获取,并以 JSON 结构通过 POST 方法发送回服务器。
在服务器端,我当前将字符串传递给调用 SQL UPDATE 操作的方法。
它有效,但我知道它一点也不安全。
我预计客户端无论如何都是不安全的,因此任何保护都应该放在服务器端。我该怎么做才能确保 UPDATE 操作免受 SQL 注入的影响?
我正在寻找一个可以“引用”文本的函数,这样它就不会混淆 SQL 解析器。我期望这样的功能存在,但找不到它。
编辑: 这是我当前设置字符字段名称标签的代码:
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()
来自文档:
con.execute("insert into person(firstname) values (?)", ("Joe",))
这逃脱了
"Joe"
,所以你想要的是
con.execute("insert into person(firstname) values (?)", (firstname_from_client,))
DB-API 的
.execute()
支持参数替换,它将为您处理转义,它在文档顶部附近提到; http://docs.python.org/library/sqlite3.html 上面永远不要这样做——不安全。