MySQL IN 子句的安全内爆列表
数据库安全至关重要,避免 SQL 注入至关重要。在 MySQL IN 子句中使用值列表时,必须安全地这样做。
问题:
将列表扩展为字符串以在字符串中使用IN 子句容易受到 SQL 的影响
# Vulnerable cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % foostring)
解决方案:
为了防止 SQL 注入,直接使用值列表作为参数:
# Safe format_strings = ','.join(['%s'] * len(list_of_ids)) cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings, tuple(list_of_ids))
这个方法将值列表作为参数传递,而不是将它们嵌入到查询字符串中,有效防止注入
通过直接将数据作为参数传递给 MySQL 驱动程序,您无需手动引用和转义,从而确保数据库操作的完整性。
以上是如何安全地在 MySQL IN 子句中使用列表来防止 SQL 注入?的详细内容。更多信息请关注PHP中文网其他相关文章!