2016-03-04 28 views
0

按照psycopg2文档(http://initd.org/psycopg/docs/connection.html)就指出:Python的psycopg2串插格式VS%

Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint. 

在警告它专门引用没有做这样的事情:

cur.execute(SQL % data) 

该警告也适用于以下使用格式?

cur.execute(SQL.format(data)) 

我不知道格式的内容,但是我假设它是用%字符串互操作其下将使得它的使用不妥当

回答

0

SQL.format()(其中SQL是一个普通的醇” Python字符串)没有按实际上在底层使用%插值,但它具有相同的缺陷:您替换的值对于SQL没有正确转义(它们怎么可能是这样; Python不知道SQL是SQL语句)并且您的SQL语句可以然后受到注射攻击。

您的各种SQL模块都有防止此问题的方法,您应该改用它们。

0

是的,它的确如此。字符串插值方法很脆弱,因为它们允许SQL注入攻击。使用外部(用户提供的)数据作为参数化查询中的参数(而不是构建查询字符串)使得这种攻击成为不可能。

+0

我相信你的意思是可能的*,而不是不可能的 – user1077071

+0

@ user1077071澄清。 –