首页 >数据库 >mysql教程 >如何在 Python 的 `MySQLdb` 中安全地使用 SQL 通配符以避免注入?

如何在 Python 的 `MySQLdb` 中安全地使用 SQL 通配符以避免注入?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 03:31:08906浏览

How to Safely Use SQL Wildcards with Python's `MySQLdb` to Avoid Injection?

在 Python 字符串格式中使用 SQL 通配符和 LIKE 运算符

将 SQL 通配符和 LIKE 运算符插入 Python 字符串格式可能具有挑战性。本文提供了尝试使用 MySQLdb 执行 MySQL 查询时遇到的常见错误的解决方案。

来自 MySQLdb 的错误

尝试 3 和 4 从 MySQLdb 返回错误,指示“格式字符串参数不足。”出现这种情况是因为 Python 中的字符串格式化运算符将 % 符号解释为格式说明符。

SQL 注入漏洞

显示的前四次尝试容易受到攻击SQL注入攻击。应对用户输入(例如查询变量)进行清理或转义,以防止执行恶意 SQL。

正确方法

建议的方法是使用占位符而不是字符串格式。下面是一个示例:

curs.execute("""SELECT tag.userId, count(user.id) as totalRows 
                  FROM user 
            INNER JOIN tag ON user.id = tag.userId 
                 WHERE user.username LIKE %s""", ('%' + query + '%',))

两个参数传递给execute():

  • 带有占位符的 SQL 语句,用于插入通配符。
  • 一个元组包含带有通配符的清理查询值。

此方法确保 SQL语句有效并且可以防止 SQL 注入。

以上是如何在 Python 的 `MySQLdb` 中安全地使用 SQL 通配符以避免注入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn