NET中如何防止注入攻击.doc

上传人:cl****1 文档编号:546037725 上传时间:2024-01-10 格式:DOC 页数:14 大小:17.42KB
返回 下载 相关 举报
NET中如何防止注入攻击.doc_第1页
第1页 / 共14页
NET中如何防止注入攻击.doc_第2页
第2页 / 共14页
NET中如何防止注入攻击.doc_第3页
第3页 / 共14页
NET中如何防止注入攻击.doc_第4页
第4页 / 共14页
NET中如何防止注入攻击.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《NET中如何防止注入攻击.doc》由会员分享,可在线阅读,更多相关《NET中如何防止注入攻击.doc(14页珍藏版)》请在金锄头文库上搜索。

1、目的:对输入的字串长度,范围,格式和类型进行约束.?在开发ASP.NET程序时使用请求验证防止注入攻击.?使用ASP.NET验证控件进行输入验证.?对不安全的输出编码.?使用命令参数集模式防止注入攻击.?防止错误的详细信息被返回到客户端.?概述?:你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和IP地址等.弱输入校验通常为注入攻击提供了机会.下面是常见的利用弱输入校验或无输入校验进行攻击的手段.SQL?注入(SQL?injection).?如果你使用用户的输入值来动态构造SQ

2、L语句,那么数据库可能执行攻击性的有害SQL语句.?跨站脚本(Cross-site?scripting).?跨站脚本攻击利用网页验证漏洞注入客户端脚本.接下来这些代码被发送到受信任的客户端电脑上并被浏览器解释执行.因为这些代码来自受信任的站点,所以浏览器无法得知这些代码是有害的.?未授权的文件访问(Unauthorized?file?access).如果你的代码从调用者那里接受输入,恶意用户可以看到你对文件的操作过程从而访问那些受保护的文件或者使用你的代码注入非法数据.?注意?:?注入攻击可通过使用HTTP或HTTPS?Secure?Socket?Layer(SSL)?连接.?传输加密技术不能

3、用来防御攻击.通常的输入验证方法总结如下.你应在所有的需要通过网络输入的地方进行验证,比如文本框和其它表单输入字段,?查询字串参数,cookies,服务器端变量和网络方法参数.注意,过滤策略应该是只允许正确的输入然后拒绝非法输入.这是因为定义正确的输入策略比过滤所有的非法输入要容易,那通常很难包括所有的非法输入.通入如下几个方面验证输入内容:约束.验证是否输入的是正确的类型,字符长度,格式和范围.可以应用ASP.NET验证控件来约束服务器控件输入.约束其它来源的输入可以使用正则表达式和自定义的验证规则.?拒绝.检测已知的有害数据输入并拒绝.?过滤.有时候你会希望过滤掉用户输入中那些有安全隐患的

4、那些部分.例如,你的程序允许自由格式的输入,比如备注字段,你会允许特定的安全HTML标记象b,i及其它的HTML标记.?步骤提要通过以下步骤保护你的ASP.NET程序不受注入式攻击危害?:第一步.使用ASP.NET请求验证.?第二步.约束输入.?第三步.对不安全的输出进行编码.?第四步.对SQL查询语句使用命令参数.?第五步.验证ASP.NET的出错信息没有泄漏至客户端.?下面的章节将对这些步骤进行详细讨论.第一步.使用ASP.NET请求验证.默认地,ASP.NET?1.1和2.0请求验证会对送至服务器的数据检测是否含有HTML标记元素和保留字符.这可以防止用户向程序中输入脚本.请求验证会对照

5、一个有潜在威胁的字符串列表进行匹配,如果发现异常它会抛出一个HttpRequestValidationException类型的异常.你可以在你的web.config文件中的pages元素中加入validateRequest=false?或在单独的页面的Pages元素里面设置ValidateRequest?=?false来禁用此项功能.如果你想禁用请求验证功能,你可以仅在需要的页面禁用它.比如你在程序页面上包含一个可接受HTML格式输入的字段.确定在Machine.config文件中请求验证功能被打开.请求验证功能在ASP.NET中被默认启用.你可以在Mments文件中看到如下的默认设置.pag

6、es?validateRequest?=?true?.?/?确认你没有修改你的服务器的Machine.config和应用程序的Web.config文件里的默认设置.测试ASP.NET请求验证你可以测试请求验证的作用.创建一个ASP.NET页面通过设置ValidateRequest?=?fasle禁用请求验证,代码如下?:?%?Language=C#?ValidateRequest=false?%html?script?runat=server?void?btnSubmit_Click(Object?sender,?EventArgs?e)?/If?ValidateRequest?is?fals

7、e,?then?hello?is?displayed?/If?ValidateRequest?is?true,?then?ASP.NET?returns?an?exception?Response.Write(txtString.Text);?/script?body?form?id=form1?runat=server?asp:TextBox?id=txtString?runat=server?Text=scriptalert(hello);/script?/?asp:Button?id=btnSubmit?runat=server?OnClick=btnSubmit_Click?Text=

8、Submit?/?/form?/body/html当你运行页面的时候,Hello被显示在一个消息框中,因为在txtString中的脚本被执行并被客户端的浏览器处理.如果你设置ValidateRequest?=?true?或者移除ValidateRequest页面属性,ASP.NET请求验证会拒绝脚本输入并抛出一个象下面这样的错误信息.A?potentially?dangerous?Request.Form?value?was?detected?from?the?client?(txtString=scriptalert(hello).注意?不要仅仅依赖请求验证功能,而只是把它作为自定验证的辅导

9、手段.第二步.约束输入要约束输入通过如下方法?:使用服务器端的输入验证.不要依赖于客户端的验证,因为它很容易就被绕过.使用客户端验证是为了减少页面返住次数提升性能,改进用户体验.?验证输入的长度,范围,格式和类型.确保输入内容是符合要求的正确内容.?使用强数据类型.为数字类型的输入指定如Integer或者Double的类型.为字符输入指定为String数据类型.为日期时间输入指定DateTime类型.?要验证表单里面的HTML控件输入字段,在服务器端代码中进行验证,使用Regex正则表达式类型可以帮助约束字符输入.下面的章节介绍如何约束普通输入类型的变量.验证字符串字段要验证字符串字段,如姓名

10、,地址,传真,生份证号码,使用正则表达式.?约束可接受的字符范围.?启动格式规则.例如,基于模式的字段如税号,邮编,邮递区号需要规定的字符模式.?验证长度.?使用正则表达式验证控件(RegularExpresionValidator)要使用则表达式验证控件需要设置待验证的控件名(ControlToValidate),验证表达式(ValidationExpression)和出错提示(ErrorMessage).相关的属性设置请看下面的代码示例.form?id=WebForm?method=post?runat=server?asp:TextBox?id=txtName?runat=server/

11、asp:TextBox?asp:RegularExpressionValidator?id=nameRegex?runat=server?ControlToValidate=txtName?ValidationExpression=a-zA-Z./s1,40$?ErrorMessage=Invalid?name?/asp:regularexpressionvalidator/form在上面的代码中,正则表达式被用于限定输入的名字为字母(允许大写字母和小写字母),空格,单名省略号象ODell和句点.此外,输入的字符长度被限定在40个字符.注意?正则表达式验证控件(RegularExpressio

12、nValidator)会自动加入脱字符()和美元符号($)作为开始和结束的分隔符.如果你没有在自定义的表达式中加入他们那么最好加入.加入分隔符只是为了让你的表达式得到想要的那部分数据内容.使用正则表达式类(Regex?Class)如果你没有使用服务器端的控件(意味着你不能使用验证控件),或者你需要其它的输入字段源而非表单字段(比如查询字串参数和cookies),那么你可以使用正则表达式类(Regex?class).使用正则表达式类加入使用using前缀的语句导入System.Text.RegularExpressions命名空间.?确认正则表达式包含和$(字串开始处,字串结束处).?调用Reg

13、ex类的IsMatch方法,下面是代码示例.?/Instance?method:Regex?reg?=?new?Regex(a-zA-Z./s1,40$);Response.Write(reg.IsMatch(txtName.Text);/Static?method:if?(!Regex.IsMatch(txtName.Text,a-zA-Z./s1,40$)?/Name?does?not?match?expression如果你不能把经常使用的正则表达式缓存起来,你应该使用IsMatch静态方法来改进性能防止不必要的对象创建过程.验证数字字段在大多数情况下,应该验证数字的输入和范围.使用服务器

14、控件验证数字字段的输入和范围,使用RangeValidator控件.RangeValidator支持货币,日期,整型,双精度和字符串类型的数据.使用RangeValidator控件需要设置需要验证的控件名(ControlToValidate),类型(Type),最小值(MinimumValue),最大值(MaximumValue),和出错提示信息(ErrorMessage)属性下面是代码示例?:?asp:RangeValidator?ID=RangeValidator1?Runat=server?ErrorMessage=Invalid?range.?Number?must?be?between?0?and?255.?ControlToValidate=rangeInput?MaximumValue=255?MinimumValue=0?Type=Integer?/如果你没使用服务器控件,你可以将输入值转化成整型再进行验证来完成对数字的范围验证例如,要验证一个整数是否合法,使用ASP.NET2.0提供的新方法Int

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号