gpt4 book ai didi

mysql - python针对多列查询的注入(inject)保护

转载 作者:行者123 更新时间:2023-11-30 00:07:33 24 4
gpt4 key购买 nike

如何在以下代码中进行安全的 SQL 注入(inject)?通常我会使用逗号而不是百分号,因为它不直接注入(inject)字符串,但当我想从数据库中选择多个列时我不能这样做。

这有效但不安全:

def (columns)
% columns is string of column names separated by commas
id = 5
queryStr = """SELECT %s FROM dash WHERE id=%s LIMIT 1"""
q.execute(queryStr % (columns, id))

虽然这不起作用:

def (columns)
% columns is string of column names separated by commas
id = 5
queryStr = """SELECT %s FROM dash WHERE id=%s LIMIT 1"""
q.execute(queryStr, (columns, id))

当我调用此方法时,我需要能够更改正在搜索的列数。

最佳答案

无论如何,您都不能使用 execute()params 参数向查询添加列,因为这会在参数周围添加单引号,从而导致强制将其视为字符串。您最终会得到以下查询:

SELECT 'item1, item2, item3' FROM dash WHERE id=5 LIMIT 1

您必须自己插入列。

为了防止 SQL 注入(inject),您有责任过滤列名列表并根据该表的已知列列表对其进行验证。将此视为一个白名单过程。

关于mysql - python针对多列查询的注入(inject)保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com