MicroHelper.Net

雷锋说.对待朋友要MicroHelper,对待敌人要害尔扑
随笔 - 74, 评论 - 431, 引用 - 7

导航

关于

邮件系统不稳定,使用songdming at 263 dot net吧
PageRank

FastCounter by bCentral

 

标签

每月存档

最新留言

  • re: 代码组织
    <a href="http://www.vgoldseller.com/runescape-c-599.html">runescape money</a> ...
    by cxb000(匿名) on 2008/3/26 10:32:11
  • 回复: 看PPMM
    <a target="_new" href="http://www.bestgoldlion.com">http://www.bestgoldlio...
    by runescape gold(匿名) on 2007/12/18 5:13:00
  • 回复: IoC初阶
    <a target="_new" href="http://www.bestgoldlion.com">http://www.bestgoldlio...
    by runescape gold(匿名) on 2007/12/18 5:12:00
  • 回复: 数据分页 (最后更新2003/11/18)
    <a target="_new" href="http://www.sky361.com">http://www.sky361.com</a&...
    by wow power leveling(匿名) on 2007/12/18 5:06:00
  • 回复: iBATIS.Net
    <a target="_new" href="http://www.rsgold-rsgold.com">http://www.rsgold-rsg...
    by runescape money(匿名) on 2007/12/18 5:04:00
  • 回复: 防范Sql注入式攻击
    <a target="_new" href="http://www.rsgold-rsgold.com">http://www.rsgold-rsg...
    by runescape money(匿名) on 2007/12/18 5:03:00
  • 回复: TDD——NUnit的原理
    <a target="_new" href="http://www.rsgold-rsgold.com">http://www.rsgold-rsg...
    by runescape money(匿名) on 2007/12/18 5:03:00
  • 回复: 开源的CMS
    <a target="_new" href="http://www.rsgold-rsgold.com">http://www.rsgold-rsg...
    by runescape money(匿名) on 2007/12/18 5:03:00
  • 回复: CCNet 1.0即将发布
    <a target="_new" href="http://www.sky361.com">http://www.sky361.com</a&...
    by runescape gold(匿名) on 2007/12/18 5:00:00
  • 回复: 关于加班
    为什么这年头加班都成了是我们 的义务了?加班不给加班费也就算了,难得早点回去,还要说三道四的,这社会会为什么会发展成这样啊????
    by 小小(匿名) on 2007/12/14 8:18:00
  • 回复: Presentation草稿:面向对象设计的基本原则
    是的,模式要实事求是,应该是解决问题为主 <br>我搜集了原则方面的文章,有空去看看吧 <br><a target="_new" href="...
    by objecttutor(匿名) on 2007/10/31 17:26:00
  • 回复: 开源的CMS
    支持一下
    by qingxingmeng(匿名) on 2007/10/30 18:03:00
  • 回复: .Net的开源项目
    AnyView(网络警)网络监控软件是一款国内目前最专业的企业级的网络监控软件产品。包含局域网上网监控、邮件监控、聊天监控、BT禁止、流量监视、上下行分离流量限制、并发连接数限制、屏幕监视和录象、硬件...
    by 网络监控软件(匿名) on 2007/10/30 12:33:00
  • 回复: .Net的开源项目
    AnyView(网络警)网络监控软件是一款国内目前最专业的企业级的网络监控软件产品。包含局域网上网监控、邮件监控、聊天监控、BT禁止、流量监视、上下行分离流量限制、并发连接数限制、屏幕监视和录象、硬件...
    by 网络监控软件(匿名) on 2007/10/30 12:32:00
  • 回复: 看PPMM
    好看就成 <br>
    by 11(匿名) on 2007/10/27 15:43:00

广告

 

Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击

动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因
比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。

string name = GetUserInput("BookName");
string script = "select table_book where book_name? like? N'%" + name + RunSql(script)
RunSql(script);

如果
name? = " ' select @@servername where '' = ' ";
这样就可以得到DB Server的名字


还以在线书店为例,用户只有登陆后才能察看自己的帐户信息,这样做是无可置疑的,然而用户验证的代码如下

//id和password直接来自用户的输入。未做处理
string id = GetUserInput("UserID");
string password = GetUserInput("UserPassword");

tring script = "select * from table_user where User_ID = '" + id? + "' and User_Password? = '" + password? + "' ";
RunSql(script);

如果用户输入的password为“ or ''=' ”,那么生成的script就为
select * from table_user where User_ID = 'UserID' and User_Password? = ' ' or ''=' '
这样一来,即使不知道用户的密码也可以察看该用户的帐户信息了

再比如,入侵者会把一些巧妙伪装的代码嵌入到你动态生成的Sql命令中,比如
Delete table_Book where 1 = 1? ...
use master--


上面的例子都是一些简单的示例,攻击者还可能通过sql的漏洞对操作系统进行攻击,比如运行
[xp_cmdshell],[xp_regread]

当然实际上的攻击没有这么简单,攻击者还会利用系统设计的其他漏洞。比如程序把数据库返回的出错信息没有进行转换就直接输出给用户看,那么攻击者就设计一些sql语句诱导系统返回需要的信息


从上面的这些例子可以看出,对数据库访问权限的设计不当,给与每一个数据库连接太多的权限,甚至dbo或sa的权限,也是sql注入式攻击利用的主要漏洞之一。

?

防范sql注入式攻击

最小权限原则。特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合

对用户输入进行检查。对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的

使用存储过程,如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令。

当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节

针对常用的sql注入式攻击方式对症下药

参考

Advanced SQL Injection In SQL Server Applications
http://www.nextgenss.com/papers/advanced_sql_injection.pdf

More Advanced SQL Injection
http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf


?

打印 | 张贴于 2004-03-04 11:30:00 | Tag:暂无标签

留言反馈

#回复: 防范Sql注入式攻击 编辑
2007-12-18 05:03:00 | [匿名:runescape money]
#re: 防范Sql注入式攻击 编辑
防范sql注入攻击的最彻底办法就是不使用字符串拼接来生成sql语句。用parameter存储用户的输入(包括程序中Http get方法的参数)是没有有注入的可能的。
做一个辅助的类帮助生成sql就可以解决动态生成sql和复杂查询的问题。
2005-08-10 18:10:00 | [匿名:mooniscrazy]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.2.0