如何从SQLInjection保护SELECT * FROM var1 WHERE var2语句

时间:2019-06-27 21:46:29

标签: python sql django sql-injection django-2.2

我正在django创建一个网站,希望用户输入表ID和组ID,然后返回放入的表和组。但是,我只发现了易于进行SQL注入的语句。有人知道如何解决这个问题吗?

mycursor = mydb.cursor()
qry = "SELECT * from %s WHERE group_id = %i;" % (assembly_name, group_id)

mycursor.execute(qry)

return mycursor.fetchall()

还是做一些可以达到相同目的的事情?

我试图做这样的事情:

assembly_id = 'peptides_proteins_000005'
group_id = 5

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM %s WHERE group_id = %s", [assembly_id, group_id])

myresult = mycursor.fetchall()

但我收到此错误:

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''peptides_proteins_000005' WHERE group_id = 5' at line 1

1 个答案:

答案 0 :(得分:1)

通常无法绑定表名称。对于SELECT语句,最简单的方法是通过将白名单清除表名称候选。

检查使用抽象或通过某种方式将用户输入限制为有限名称的有效名称(作为用户界面的一部分)的开销是否合理。