在python抵御SQL注入在python抵御SQL注入(Protecting against SQ

2019-05-17 12:10发布

我在Python一些代码,设置在SQLite DB一个char(80)值。

该字符串直接从通过文本输入字段中的用户获得的,并用在一个JSON结构的POST方法发送回服务器。

在服务器端,我目前字符串传递给调用SQL UPDATE操作的方法。

它的工作原理,但我知道它是不是安全的。

我想到的是,客户端是不安全的,无论如何,所以任何保护是在服务器端被投入。 我能做些什么,以确保更新操作agains 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()

Answer 1:

从文档:

con.execute("insert into person(firstname) values (?)", ("Joe",))

这种逃避"Joe" ,所以你想要的是

con.execute("insert into person(firstname) values (?)", (firstname_from_client,))


Answer 2:

在DB-API的.execute()支持参数替代将采取逃避对你的照顾,其附近的文档的顶部提到的; http://docs.python.org/library/sqlite3.html以上从未做到这一点-不安全的



Answer 3:

NOOOO ...使用绑定变量! 这就是他们来这里的目的。 见这

用于该技术的另一名称是参数化的SQL (我想“绑定变量”可以是与Oracle专门用于名称)。



文章来源: Protecting against SQL injection in python