如何在以下代码中进行安全sql注入?通常我会使用逗号而不是百分号,因为它不会直接注入字符串,但是当我想从数据库中选择多个列时,我无法这样做。
这有效,但不安全:
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))
当我调用此方法时,我需要能够更改我搜索的列数。
答案 0 :(得分:0)
你不能使用params
的{{1}}参数来为查询添加列,因为这将在参数周围添加单引号,这将强制它被视为字符串。你最终会得到这个查询:
execute()
您必须自己插入列。
为了防止SQL注入,您有责任过滤列名列表并根据此表的已知列列表进行验证。请将此视为白名单进程。