SQL注入式攻击

常见的SQL注入式攻击过程类如:

 

  ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

 

  ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

 

  System.Text.StringBuilder query = new System.Text.StringBuilder(

 

  "SELECT * from Users WHERE login = '")

 

  .Append(txtLogin.Text).Append("' AND password='")

 

  .Append(txtPassword.Text).Append("'");

 

  ⑶ 攻击者在用户名字和密码输入框中输入xxx ' or '1' = '1 之类的内容,例如a' or '1'='1。

 

  ⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = ' ' or '1'='1' AND password = ' ' or '1'='1'。

 

  ⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

 

  ⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

 

  如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。


所以,最好不要采用拼接SQL语句方式进行查询

解决方法

过滤掉所有的  单引号..  也就是把所有的单个的单引号  变成两个单引号  因为SQL中单引号是注释用的.
过滤单引号是终级必杀技,不要相信存储过程,那东西 仍然有漏洞,从它的实现过程可以看出,这东西仍然是漏洞..
还有那些所谓参数传递,其实现原理如果不是过滤单引号. 那么仍然有漏洞... 各种语言的参数传递做的不一样,你可以自己试一下,如果单引号确实被过滤掉了..  那么 可以防注入,否则,还是老老实实的手动过滤字符串中的单引号吧..
原理就不用讲了吧,SQL 注入原理就是修改原字符串结尾,让数据库理解错误
这里举个例子,
比如 最常用的用户名密码
selsect * form usertable where username='tom' and password='123456'
那么 如果你只想跳过验证  那么 只要把那个 tom  换一下
也就是 selsect * form usertable where username='tom' or '1'='1' and password='123456'
这里 就是把 原来的tom 换成  tom' or '1'='1   从而让数据库曲解了SQL语句
如果你想干的更狠 搞点破坏  比如删光 数据库 那么 可以这么写
selsect * form usertable where username='tom' or '1'='1' and password='123456' del * from usertable where '1'='1'
这里 就是把 原来的 密码 123456 换成
123456' del * from usertable where '1'='1    
其他的功能 你可自己再想想 怎么搞,
总之  如果 单引号过滤了  那么就会没有任何问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值