仓库源文站点原文


tags: [sql]

把前端传过来的值当做数据库查询的参数是常见的,但是如果你没有做任何的校验,那么注入就有可能发生。

mysql数据库SQL注入

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