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就可以正常执行~
前一篇:MySQL删除大表
后一篇:一则软raid硬盘故障的笔记