Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一
利用SQL “#” 的注释功能更改原SQL语句来实现
存在SQL注入问题的代码:
#! /usr/bin/python3 # -*- encoding:utf8 -*- import pymysql import hashlib dbserver = input('输入服务器地址:') username = input('请输入用户帐号:') passwd = input('请输入帐号密码:') dbname = input('输入数据库名:') # 使用md5进行明文密码加密 md5 = hashlib.md5() md5.update(passwd.encode('utf8')) passwd = md5.hexdigest() sql = 'select * from user where name = "%s" and passwd = "%s";' % (username,passwd) db = pymysql.connect( host=dbserver, user=username, passwd=passwd, database=dbname ) cursor = db.cursor() cursor.execute(sql) result = cursor.fetchall() if not result: print('用户名密码不匹配') else: print('欢迎{}回来,你的信息是:\n{}'.format(username, result))
SQL注入问题修正
#! /usr/bin/python3 # -*- encoding:utf8 -*- import pymysql import hashlib dbserver = input('输入服务器地址:') username = input('请输入用户帐号:') password = input('请输入帐号密码:') dbname = input('输入数据库名:') # 使用md5进行明文密码加密 md5 = hashlib.md5() md5.update(password.encode('utf8')) password = md5.hexdigest() sql = 'select * from user where name = %s and passwd = %s;' print(sql.format(username, password)) db = pymysql.connect( host=dbserver, user=username', passwd=password, database=dbname ) cursor = db.cursor() print(password) cursor.execute(sql, (username, password)) result = cursor.fetchall() if not result: print('用户名密码不匹配') else: print('欢迎{}回来,你的信息是:\n{}'.format(username, result))