具有以下条件:
array = ['', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone=']
我可以轻松生成以下查询:
//(query, array)
('select count(*) from symbols where name in (?,?,?,?,?,?)', ('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table;', 'fakeone='))
生成查询,可以将其放入cursor.execute()函数中,并且当前正在通过以下代码进行查询:
"select count(*) from table where name in (%s)" % ",".join("?"*len(array)),array
和cursor.execute()函数返回所需的输出。但是问题是当我想用AND过滤查询时,例如:
select count(*) from table where name in (...) and column5 in (...)
我不知道如何在python中生成查询,cursor.execute()函数将接受该查询,请帮忙-谢谢!
答案 0 :(得分:0)
我不确定您要使用连接的第二条select
语句要完成什么。第一行是您应该传递给cur.execute()
的内容。例如:
`cur.execute(
'select count(*) from symbols where name in (?,?,?,?,?,?)',
('', 'kujawski=', "'", "select * from symbols where name = '='", ';drop table symbols;', 'fakeone=')
)`
这还可以防止SQL注入攻击,而这正是您自己想要利用的攻击。</ p>
如果要执行drop
语句等,则应使用cur.execute()
自行处理,而不要像尝试的其他命令那样作为嵌入式命令使用。 / p>
实际上,我不知道您要如何完成此任务。这是在sqlite完成后的大致陈述。
select
count(*)
from
symbols
where
name in (
'',
'kujawski=',
"'",
"select * from symbols where name = '='",
';drop table symbols;',
'fakeone=')