码迷,mamicode.com
首页 > 数据库 > 详细

MySQLdb 防SQL注入,同时打印已执行的SQL

时间:2015-08-01 19:13:12      阅读:442      评论:0      收藏:0      [点我收藏+]

标签:python sql注入 mysqldb打印已执行的sql

>>> import MySQLdb

>>> conn=MySQLdb.connect(user=‘root‘,passwd=‘root‘)

>>> cur=conn.cursor()

>>> sql = "select user from mysql.user where user=‘%s‘ and password = ‘%s‘ ";

>>> cur.execute(sql % (‘aaa‘,‘aaa‘))

0L

>>> cur.execute(sql % ("aaa","aaa‘ or ‘‘ =‘"))  #SQL注入

3L

>>> cur._executed  #打印刚执行的SQL

"select user from mysql.user where user=‘aaa‘ and password = ‘aaa‘ or ‘‘ =‘‘ "  

>>> cur.fetchall()

((‘root‘,), (‘root‘,), (‘root‘,))

>>> sql="select user from mysql.user where user=%s and password = %s "

>>> cur.execute(sql,("aaa","aaa‘ or ‘‘ =‘"))  #SQL注入失败。将变量作为 execute 的参数传入,execute函数会自动进行转义,需要注意的是,所有的占位符都是%s, %s 两边不需要引号,execute会自动根据你传如参数的类型判断是否添加引号。

0L

>>> cur._executed

"select user from mysql.user where user=‘aaa‘ and password = ‘aaa\\‘ or \\‘\\‘ =\\‘‘ "



MySQLdb 防SQL注入,同时打印已执行的SQL

标签:python sql注入 mysqldb打印已执行的sql

原文地址:http://youmeng123.blog.51cto.com/1420398/1680799

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!