在python中防止SQL注入

时间:2012-06-08 14:03:21

标签: sql python-2.7 security

我在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()

3 个答案:

答案 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特别使用的名称。)

相关问题