首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:连接到MySQL并执行查询的最佳实践和最安全的方法

Python:连接到MySQL并执行查询的最佳实践和最安全的方法
EN

Stack Overflow用户
提问于 2011-10-28 20:38:48
回答 2查看 46K关注 0票数 70

在MySQL上运行查询最安全的方式是什么?我知道MySQL和SQL注入所涉及的危险。

然而,我不知道我应该如何运行我的查询,以防止注入其他用户( can客户端)可以操作的变量。我曾经编写过自己的转义函数,但显然这是“未完成的”。

我应该使用什么,应该如何使用它在不冒MySQL注入风险的情况下通过python安全地在MySQL数据库上查询和执行插入操作?

EN

回答 2

Stack Overflow用户

发布于 2011-10-28 21:22:34

作为Bruno答案的扩展,您的MySQL客户端库可能支持指定命名参数的几种不同格式中的任何一种。在PEP 249 (DB-API)中,您可以编写如下查询:

‘'qmark’

代码语言:javascript
复制
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = ?", (lumberjack,))

‘'numeric’

代码语言:javascript
复制
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :1", (lumberjack,))

‘命名’

代码语言:javascript
复制
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :jack", {'jack': lumberjack})

‘格式’

代码语言:javascript
复制
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %s", (lumberjack,))

‘'pyformat’

代码语言:javascript
复制
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %(jack)s", {'jack': lumberjack})

您可以通过查看paramstyle模块级变量来查看您的客户端库支持哪些:

代码语言:javascript
复制
>>> clientlibrary.paramstyle
'pyformat'

对于处理可能不安全的数据,上面的任何选项都应该做正确的事情。正如Bruno所指出的,请不要试图自己插入参数。通常使用的客户端库在正确处理数据方面比我们普通人要好得多。

票数 81
EN

Stack Overflow用户

发布于 2018-07-04 03:10:29

如果您使用的是mysqldb,则可以使用内置的escape_string函数。就像这样。

代码语言:javascript
复制
sql = "SELECT spam FROM eggs WHERE lumberjack = '" + MySQLdb.escape_string(str(lumberjack)) + "';"
cursor.execute(sql)

我总是更喜欢使用数据库连接器的转义功能-它按预期工作,自己手动编写转义函数是一种安全风险。

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

https://stackoverflow.com/questions/7929364

复制
相关文章

相似问题

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