根据psycopg2文档(http://initd.org/psycopg/docs/connection.html),它声明:
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)
此警告是否也适用于以下使用format的应用程序?
cur.execute(SQL.format(data))
我不知道format的内部原理,但我假设它在底层使用% string interop,这将使它的使用变得不可取
发布于 2016-03-05 02:16:48
SQL.format()
(其中SQL
是一个常规的ol‘Python字符串)实际上并不在幕后使用%
插值,但它有相同的缺陷:您在其中替换的值没有正确地转义为SQL (怎么可能;Python不知道SQL
是一个SQL语句),您的SQL语句可能会受到注入攻击。
您的各种SQL模块都有防止此问题的方法,您应该改用它们。
发布于 2016-03-05 02:33:49
是的,确实如此。字符串插值方法是脆弱的,因为它们允许SQL注入攻击。使用外部(用户提供的)数据作为参数化查询中的参数(而不是构建查询字符串)使这种攻击变得不可能。
https://stackoverflow.com/questions/35803191
复制相似问题