关于sql注入(详解)

17 篇文章 0 订阅
6 篇文章 0 订阅

威胁简介

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

攻击思路

偿试所有可以输入的地方,偿试注入攻击。 根据返回的报错结果,判断后台服务的类型及数据库的类型。 确认后台服务及数据库类型后,改进攻击方案,进行有针对性的攻击。

攻击示例

要进入一个系统,当然最离不开的就是登录界面,所以我们就来看看如何免密码登录系统。

登录界面要求两个输入项:用户名、密码。

我们可以这样实现免账号登录:用户名输入“’ or 1=1 --”, 密码输入随意字符。

那么现在来分析一下,为什么可以免账号登录。

后台验证一般是类似的SQL:

String sql = “select * from tuser where user_name=’ “+user_name+” ’ and user_pass=’ “+user_pass+” '”;
拼上我们输入的参数后,语句变成了:

select * from tuser where user_name=’ ’ or 1=1 --‘and user_pass=’’
后面的"–‘and user_pass=’’" 相当于是注释代码,不生效。实际执行的SQL为:

select * from tuser where user_name=’ ’ or 1=1
这样一定要查出用户数据,很可能后面的逻辑处理就当作用户登录成功处理了,然后实现了免密码登录。

如果希望进一步加强危害,可以实现任意语句执行,例如:用户名传入“’; drop table tuser; --”; 实际执行的SQL变成了:

select * from tuser where user_name=’’ ; drop table tuser; --’ and password=’’
这样你的表就没了~

应对方案

推荐方案
采用 占位符 方式进行SQL传参,禁止将入参直接拼接到SQL中 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值