何为SQL注入?
- 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
如何防止SQL注入?
非安全方式:
# 非安全方式
find_name = input("请输入您要查询商品的名称:")
sql = 'select * from goods where name="%S";' % find_name
# 执行select语句,并返回查询的常熟:查询所有数据
count = cs1.execute(sql)
- 当输入" or 1=1 or " (双引号也要输入)的时候就会返回goods表中所有数据
- 因为 where条件中的 1=1始终满足
- 因此相当于代码 select * from goods;
安全方式
- 构造execute参数列表,让模块自动(自带功能)去拼装查询字符串,可防止SQL注入现象发生
# 安全方式
find_name = input("请输入您要查询商品的名称:")
# 构造参数列表
params = [find_name]
# 执行select语句,并返回受到影响的行数;查询数据
count = cs1.execute('select * from goods where name=%s;' % params)
- 注意:
- 如果是有多个参数,需要进行参数化
- 那么params = [参数1, 参数2, ……],此时sql语句中有多个%s即可