如何保护 SELECT * FROM var1 WHERE var2 语句免受 SQL 注入
How to protect SELECT * FROM var1 WHERE var2 statements from SQLInjection
我正在 django 中创建一个网站,我希望用户在其中输入 table id 和组 id,然后 return table 和输入的组。但是,我只找到了容易被 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
通常无法绑定 table 名称。对于 SELECT 语句,最简单的方法是通过白名单清理 table 候选名称。
检查作为用户界面的一部分使用抽象或某种方式将用户输入限制为有效名称的有限集的开销是否合理。
我正在 django 中创建一个网站,我希望用户在其中输入 table id 和组 id,然后 return table 和输入的组。但是,我只找到了容易被 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
通常无法绑定 table 名称。对于 SELECT 语句,最简单的方法是通过白名单清理 table 候选名称。
检查作为用户界面的一部分使用抽象或某种方式将用户输入限制为有效名称的有限集的开销是否合理。