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))