博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL注入攻击:攻与防
阅读量:6607 次
发布时间:2019-06-24

本文共 1296 字,大约阅读时间需要 4 分钟。

攻:

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"/>。

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

 

 

  

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

你可能感兴趣的文章
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
Solaris Studio 12.4 Beta update 7/2014
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>
《用友ERP-U8(8.72版)标准财务模拟实训》——1.4 系统管理注册和导入演示账套...
查看>>
《Node.js区块链开发》一3.6 总结
查看>>
《CCNP TSHOOT 300-135学习指南》——2.1节故障检测与排除方法及流程
查看>>
《UG NX8.0中文版完全自学手册》一2.8 布尔运算
查看>>
pera 发布新概念浏览器 Neon ,内置分屏模式
查看>>
移动阅读时代“长文章”生存状态调查
查看>>
《深入理解JavaScript》——1.7 运算符
查看>>
网站优化的具体实施方案
查看>>
如何设置iPhone的手机铃声?【来自星星的你】
查看>>
改变PNG图片的透明度 delphi
查看>>
图解告诉你怎么在VS2017下调试DLL
查看>>
printf中%%的意思
查看>>
Visual studio Express 2012 for Web 试用
查看>>
PB控制Excel表格
查看>>
无法连接 MKS: Login(username/password)incorrect
查看>>
系统内存耗尽的案例分析
查看>>
Exchange2010 生成以下严重警告: 10。内部错误状态为 1203
查看>>