繁体   English   中英

Python psycopg2字符串插值格式与%

[英]Python psycopg2 string interpolation format vs %

根据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)

此警告是否也适用于以下使用格式?

cur.execute(SQL.format(data))

我不知道format的内部原理,但是我假设它在下面使用%string interop,这将使它的用法不建议使用

SQL.format() (其中SQL是常规的SQL.format()字符串)实际上并未在SQL.format()使用%插值,但存在相同的陷阱:您替换的值无法正确地转义为SQL(怎么可能是; Python不知道SQL是SQL语句),然后您的SQL语句可能会受到注入攻击。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM