【计算机网络】Web应用的安全问题——SQL注入原理及防御

SQL注入原理及防御


一、SQL注入原理

1.什么是SQL注入?

因为基本上每一个Web应用底层都需要使用数据库来保存所需的各种数据,与数据库交互的方式就是程序生成并向数据库提交一些SQL语句来完成数据的CRUD操作

那么一旦这些SQL语句被恶意篡改、被控制,攻击者在原有SQL语句上拼接上一些关键字,从而改变该SQL语句的愿意,从而使得SQL语句经数据库操作后变成攻击者想要达到的效果,比如读取到攻击想要知道的信息、修改某些数据。最严重情况下,攻击者可以利用SQL注入读取甚至修改数据库中所有数据——这就是SQL注入

现实中发生过很多案例,如利用SQL注入修改管理员账户、密码,如家的后台系统数据库整个被拖库,导致用户信息泄露

2.SQL注入原理

用一个简单的例子:如以下为某个网站的用户登录场景
在这里插入图片描述
假设该网站登录校验的底层SQL语句就是:

select * from user where username='用户输入' and password='用户输入'

那么返回数据count>0就代表存在该用户,否则不存在

若此时我们输入的用户名为:‘or’ 1=1
那么会导致什么结果呢?
此时SQL语句变为:

select * from user where username='' or '1=1' and password='用户输入'

where后面的查询条件就变成了用户等于空,或者1=1,1=1为恒等式,有了1=1,后面语句也就都没有了意义,此时会查询到所有用户数据,则返回的count自然就>0,导致登录成功


二、SQL注入的危害

除了以上例子外,还有如:
(1)SQL盲注,可以探知数据库的具体结构,为进一步攻击做准备
(2)泄漏数据,尤其是机密信息、账户信息
(3)取得更高权限、管理员权限,来修改表数据甚至内部结构


三、SQL注入的防御

了解了SQL注入攻击的原理,防御其实是很简单的

参数化查询

参数化查询是对SQL注入的根本性的防御,也称预处理语句:
1.通过指定查询结构,在用户输入的部分预留占位符如"@"
2.然后指定占位符内容(即将用户输入的内容作为参数传进来)

select * from user where username=@UserName and password=@PassWord;
UserName = "用户输入";
PassWord = "用户输入";

这样即使输入’or’ 1=1,也会认为是用户输入的实质内容,不会被当作是SQL语句的一部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴陵FL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值