在MySQL上运行查询最安全的方式是什么?我知道MySQL和SQL注入所涉及的危险。
然而,我不知道我应该如何运行我的查询,以防止注入其他用户( can客户端)可以操作的变量。我曾经编写过自己的转义函数,但显然这是“未完成的”。
我应该使用什么,应该如何使用它在不冒MySQL注入风险的情况下通过python安全地在MySQL数据库上查询和执行插入操作?
发布于 2011-10-28 21:22:34
作为Bruno答案的扩展,您的MySQL客户端库可能支持指定命名参数的几种不同格式中的任何一种。在PEP 249 (DB-API)中,您可以编写如下查询:
‘'qmark’
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = ?", (lumberjack,))
‘'numeric’
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :1", (lumberjack,))
‘命名’
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = :jack", {'jack': lumberjack})
‘格式’
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %s", (lumberjack,))
‘'pyformat’
>>> cursor.execute("SELECT spam FROM eggs WHERE lumberjack = %(jack)s", {'jack': lumberjack})
您可以通过查看paramstyle
模块级变量来查看您的客户端库支持哪些:
>>> clientlibrary.paramstyle
'pyformat'
对于处理可能不安全的数据,上面的任何选项都应该做正确的事情。正如Bruno所指出的,请不要试图自己插入参数。通常使用的客户端库在正确处理数据方面比我们普通人要好得多。
发布于 2018-07-04 03:10:29
如果您使用的是mysqldb,则可以使用内置的escape_string函数。就像这样。
sql = "SELECT spam FROM eggs WHERE lumberjack = '" + MySQLdb.escape_string(str(lumberjack)) + "';"
cursor.execute(sql)
我总是更喜欢使用数据库连接器的转义功能-它按预期工作,自己手动编写转义函数是一种安全风险。
https://stackoverflow.com/questions/7929364
复制相似问题