SQL
注入即是指攻击者可以在
WEB
应用程序中事先定义好的查询语句的结尾上添加额外的
SQL
语句, 在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进 一步得到相应的数据信息。
攻击实例:
# 这是一个从 users 表中通过 id 查询信息的语句
SELECT * FROM users WHERE id = 值;
# 如果传入的值为 1; DELETE FROM users,那么就会变成两条语句,会同时删除 users 表中的所有信
息。
SELECT * FROM users WHERE id = 1; DELETE FROM users;
# 这是一个修改用户密码的语句,通过id传递值来修改密码
UPDATE users SET password= '123456' WHERE id=值;
# 如果id传入的值是 1 OR True, 则会修改所有用户的密码为123456。
UPDATE users SET password= '123456' WHERE id=1 OR True;
# 1、使用占位符编写 SQL
sql = "select * from student where name=%s"
find_name = "李四"
params = [find_name]
# 2、绑定变量到 SQL
count = cursor.execute(sql, params)
result = cursor.fetchall()
print(result)
Linux 与 MySQL -- By 新⾬⽼师 Linux 与 My
使用预编译方式绑定变量 ,抵御SQL注入
"""防御SQL注入"""
import pymysql # 导入pymysql库
# 创建连接MySQL数据库的对象
connect = pymysql.connect(
host='192.168.15.128', # 设置主机名(虚拟机的ip地址)
port=3306, # 设置mysql端口号
user='root', # 设置mysql的登录账户
password='123123-ydc', # 设置mysql的登录密码
database='python_base', # 指定mysql中的数据库
charset='utf8' # 指定mysql的字符集,中间没有-
)
# 使用连接对象来创建游标对象
cursor = connect.cursor()
# 定义sql语句
# sql = "select * from student where name='月都散人' or True;"
sql = "select * from student where name=%s or age=%s;"
name = '月都散人'
age = 18
# 定义一个元组或者列表
params = (name, age,)
# 使用游标对象执行sql语句
cursor.execute(sql, params)
# 获取查询到的所有数据
data_all = cursor.fetchall()
print(data_all)
# 游标对象的关闭
cursor.close()
# 连接对象的关闭
connect.close()