首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python psycopg2字符串插值格式VS%

Python psycopg2字符串插值格式VS%
EN

Stack Overflow用户
提问于 2016-03-05 02:14:07
回答 2查看 996关注 0票数 0

根据psycopg2文档(http://initd.org/psycopg/docs/connection.html),它声明:

代码语言:javascript
运行
复制
Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.

在警告中,它特别提到了不要做这样的事情:

代码语言:javascript
运行
复制
cur.execute(SQL % data)

此警告是否也适用于以下使用format的应用程序?

代码语言:javascript
运行
复制
cur.execute(SQL.format(data))

我不知道format的内部原理,但我假设它在底层使用% string interop,这将使它的使用变得不可取

EN

回答 2

Stack Overflow用户

发布于 2016-03-05 02:16:48

SQL.format() (其中SQL是一个常规的ol‘Python字符串)实际上并不在幕后使用%插值,但它有相同的缺陷:您在其中替换的值没有正确地转义为SQL (怎么可能;Python不知道SQL是一个SQL语句),您的SQL语句可能会受到注入攻击。

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

票数 0
EN

Stack Overflow用户

发布于 2016-03-05 02:33:49

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35803191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档