把前端传过来的值当做数据库查询的参数是常见的,但是如果你没有做任何的校验,那么注入就有可能发生。
http://mysql-python.sourceforge.net/MySQLdb.html
例如mysql使用%value%来实现模糊匹配,那么value便是一个危险的值。我可以构造value将两边的分号闭合,中间插入额外的执行语句。
value = cve%" or cve_id like "1
法一:
MySQLdb.escape_string
法二:
Don't do:
sql = "INSERT INTO TABLE_A (COL_A,COL_B) VALUES (%s, %s)" % (val1, val2)
cursor.execute(sql)
Do:
sql = "INSERT INTO TABLE_A (COL_A,COL_B) VALUES (%s, %s)"
cursor.execute(sql, (val1, val2))
法三:
c.executemany