SQL注入攻击:攻与防

简介:

攻:
1. 获取数据库的结构信息:
    攻击者要成功实施一次攻击,需要了解哪个表和列可用。SQL Server默认的行为是,当不正确查询运行时返回错误消息。例如攻击者输入用户名:“'having 1=1;--”,数据库将返回包含表名和代码查询中第一列的错误消息;而group by语句可以更进一步确定查询中的列:“'group by 表名.列名 having 1=1;--”,数据库将返回查询中的下一列;攻击者可以继续附加group by语句,直到不再收到错误消息。

2. 获取数据库内容信息:
    攻击者可以利用变换错误消息,获取数据库中存储的数据,例如输入用户名:“'union select min(username),1 from Users where username>1;--”,数据库将返回表中的第一个用户名。攻击者可以使用同样的SQL注入,用password代替username得到用户账户的密码,以此类推,可以获取数据库表中的每条记录。


3. 修改数据库和内容:
    攻击者通过“';”来结束一条查询语句,然后附加破坏性的SQL语句,例如:“';delete from Accounts”或“';insert into Users (……)”。

4. 缩短查询条件:
    攻击者通过缩短查询条件来绕过身份认证过程,例如输入用户名“admin'--”或“' or a==a--”

 

防:
    客户端的任何输入(字段,查询字串参数,Cookie等)都是不安全的,虽然Asp.Net提供了一些验证控件,但这些控件都是生成客户端脚本在客户端进行校验,虽然使用这些控件可以减少页面的住返次数,改善用户体验,但是不要仅仅依赖于此,因为黑客可以很容易避过客户端脚本。

1. 过滤或转义危险字符:string.Replace("'","''")或正则;
    通常我们要定义合法字符,再检查输入是不是在合法字符范围之内;而不是校验是否包含危险字符,因为非法的情况太多了,很容易漏掉。过滤是一种不理想的构思,因为“危险的”字符可能是用户输入的有效部分。另外,攻击者可以使用ASCII十六进制字符和其他字符来通过验证,例如用0x2C来代替单引号(')。

2. 参数化SQL查询或存储过程:
    SqlParameter可以提供类型和长度检查,并自动转义用户输入。

3. 使用最小特权:
    将数据库用户能执行的动作限制到最少,绝对不要使用sa账户,因为sa具有操作数据库的所有权限。

4. 在服务器上处理错误:
    成功的SQL注入攻击不一定导致错误;导致错误的SQL注入通常是攻击者正在收集数据库信息,是攻击的前兆。在try..catch..finally中处理错误;<compilation debug="false"/>;<customErrors mode="RemoteOnly"/>。

   一般综合运用这些方法...

 

Stop SQL Injection Attacks Before They Stop You 
新型SQL截断攻击和防御方法 
SQL注入技术和跨站脚本攻击的检测  
在ASP.NET中防止注入攻击


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/21/722424.html,如需转载请自行联系原作者

相关文章
|
3天前
|
SQL 安全
jeecg-boot sql注入漏洞解决
jeecg-boot sql注入漏洞解决
13 0
|
21小时前
|
SQL 关系型数据库 MySQL
0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)
0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)
|
5天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
16 0
|
7天前
|
SQL 安全 关系型数据库
SQL 注入神器:SQLMap 参数详解
SQL 注入神器:SQLMap 参数详解
|
13天前
|
SQL 存储 Java
如何避免SQL注入?
【4月更文挑战第30天】如何避免SQL注入?
25 0
|
14天前
|
SQL 安全 PHP
【PHP 开发专栏】PHP 防止 SQL 注入的方
【4月更文挑战第30天】本文介绍了PHP防止SQL注入的策略,包括理解SQL注入的原理和危害,如数据泄露和系统控制。推荐使用参数化查询(如PDO扩展)、过滤和验证用户输入,以及选择安全的框架和库(如Laravel)。此外,强调了保持警惕、定期更新维护和开发人员安全培训的重要性,以确保应用安全。
|
14天前
|
SQL 存储 安全
|
14天前
|
SQL Oracle 关系型数据库
常见 SQL 注入绕过方法
常见 SQL 注入绕过方法
|
14天前
|
SQL Oracle 关系型数据库
利用 SQL 注入提取数据方法总结
利用 SQL 注入提取数据方法总结
|
14天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结