网络攻防-SQL注入的抵御

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值