加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Python 操作MySQL防SQL注入

(2017-09-19 18:23:37)
分类: Python
在Python语法中,一般情况我们会这样写SQL:
SQL= 'UPDATE user SET nickname = %s WHERE uid = %s;'%(nickname,uid)
然后执行:
cursor.execute(SQL)

但是这样会带来安全问题,如果传入的参数uid是形如:vivaxiao;drop database xxx;
那么实际SQL就会变成:
UPDATE user SET nickname = %s WHERE uid = 'vivaxiao';drop database xxx;
这样就存在很大的风险了~

正确的写法应该是,对SQL语句的动态参数使用变量绑定的方式,而不是字符串格式化或者字符串拼接,如下:
SQL= 'UPDATE user SET nickname = %s WHERE uid = %s;'
params = (nickname,uid)
cursor.execute(SQL,params)
###如果参数只有一个,那么格式为:params = [nickname,]###


cursor.execute(SQL,params)执行时,会对params进行处理,如果params包含有“;”,则会进行特殊处理,比如替换成其他MySQL无法识别的符号,导致不能执行SQL。这样就能起到防止SQL注入了!

但如果并没有发生SQL注入,那么params就是正常的变量传进来,SQL就可以正常执行~




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有