跳到正文

RSS安全隐患探讨


      又是枫红叶落金秋时,秋风渐起,带来的除了飞舞的落叶与阵阵寒意,还有CEO们期盼着以web 2.0这个定义模糊的概念带来利益的希望。在此,天缘姑且抛开以用户为主导的web2.0不谈,只就其中的一个重要组成部分——目前已经比较广泛使用的RSS技术与各位朋友作简单地探讨。  



RSS是以xml技术为基础,以聚合信息为目的进行信息表现的一种技术手段。其发展到目前,有多个版本及派生,比如ATOM等。随着对信息内容处理/包含的多样化,RSS的设计者将其功能与以加强,支持了js,ActiveX等多样丰富内容及处理表现的技术。而我们在享受着越来越便利的信息获取的同时,安全隐患的潘多拉盒子却慢慢地开启了。  



下面,就让天缘带着大家一起,用一个个简单地小例子,将RSS的隐患一一暴露出来吧。破坏RSS在大家心目中美好的期望并不是我所愿意的,但“不破不立,破而立之”。能在RSS更广泛流行之前,把问题暴露出来,总比事后补救更好一些呢。  





1.Web网页有繁人的弹出窗口,RSS能避免掉吗?  



在浏览网页的时候,第一讨厌的就是弹出的广告窗口,那么在RSS中,我们是否就可以静静地阅读文章而不受打扰呢。愿望是美好的,现实却是残酷的,看看下面的一个小例子:  



<?xml version="1.0" encoding="gb2312" ?>   

<rss version="2.0">  

<channel>  

 <title>伊人有约 喜欢稀饭BBS</title>  

 <link>http://skylove.study-area.org/bbs/thread.php?fid=18</link>  

 <description>拒绝浮躁,让我们沉寂下来认真学习</description>  

 <copyright>Copyright(C)喜欢稀饭BBS</copyright>  

 <managingEditor />  

 <language>zh-cn</language>  

 <ttl>10</ttl>  

 <generator>喜欢稀饭BBS</generator>  

 <item>  

<title>  

<![CDATA[ 测试 ]]>  

 </title>  

<description>  

<![CDATA[<font color=’red’ onMouseOver="javascript:window.open(’http://skylove.study-area.org’);">一个测试,把鼠标移动上来吧.</font>]]>  

</description>  



 <link>http://skylove.study-area.org/bbs/read.php?tid=752</link>  

 <comments>http://skylove.study-area.org/bbs/read.php?tid=752</comments>  

 <guid>http://skylove.study-area.org/bbs/read.php?tid=752</guid>  

<author>  

<![CDATA[ skylove ]]>  

 </author>  

 <source url="http://skylove.study-area.org/bbs/read.php?tid=752">喜欢稀饭BBS</source>  

 <pubDate>Mon, 10 Oct 2005 11:50:08  0800</pubDate>  

<category>  

<![CDATA[ 伊人有约 喜欢稀饭BBS ]]>  

 </category>  

 </item>  

</channel>  

</rss>  





以上的文本,请保存为一个xml文件,之后在rss浏览器中打开就能看到效果。当鼠标移动到那行文字的时候,竟然新开了一个web页。当然,在此例中我所指向的是一个安全的地址。然而,如果是一个恶意的rss文件,打开的是一个含有恶意代码的web页,那样会如何呢?相信结果大家都能想到了。在rss中,允许利用<![CDATA[ 和]]> 包含按原格式输出的html文本,本身是为了丰富页面元素,允许方便地用html的元素来规定字体,颜色,图片显示等元素。由于是对html代码进行解释,因此,大多的RSS浏览器在设计的时候,对这部分元素的解释,直接采用调用ie浏览器内核的方式来完成。由此造成了css和js代码也可以被方便地解释执行——“剑本双刃,为仁为恶,存乎一心。”但由此带来的问题是——比直接ie浏览web页面更糟糕的是,很多RSS自带的web浏览功能中,是没有带恶意javascript脚本过滤功能的,因此相对于ie那比较糟糕的防御而言,RSS则更是心不设防。同样类似的例子是outlook等邮件客户端在浏览多媒体邮件时候带来的麻烦,不过现在outlook的漏洞已经被微软patch了。而众多RSS浏览器,由于不是微软出品或是windows捆绑,就只好期待各浏览器的软件作者尽快更新此类功能了。所幸的是截至截稿时候为止,天缘所使用的GreatNews RSS浏览器已经加上了弹出窗口屏蔽地功能。  



2.象牛皮藓一样的漂浮广告在RSS时代是否终结了呢?  





漂浮的广告总是在我们浏览网页的时候,阻挡着我们的视线,曾经在RSS初出的时候,我们认为找到了救星,那么是否在RSS里,漂浮的广告就会消失掉呢? 试一下以下的代码吧:  



<?xml version="1.0" encoding="gb2312" ?>  

<rss version="2.0">  

<channel>  

 <title>伊人有约 喜欢稀饭BBS</title>  

 <link>http://skylove.study-area.org/bbs/thread.php?fid=18</link>  

 <description>拒绝浮躁,让我们沉寂下来认真学习</description>  

 <copyright>Copyright(C)喜欢稀饭BBS</copyright>  

 <managingEditor />  

 <language>zh-cn</language>  

 <ttl>10</ttl>  

 <generator>喜欢稀饭BBS</generator>  

 <item>  

<title>  

<![CDATA[ test ]]>  

 </title>  

<description>  

<![CDATA[   

<script language="JavaScript" type="text/JavaScript">  

<!--  

function MM_reloadPage(init) { //reloads the window if Nav4 resized  

 if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {  

  document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}  

 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();  

}  

MM_reloadPage(true);  



function MM_timelinePlay(tmLnName, myID) { //v1.2  

 //Copyright 1997, 2000 Macromedia, Inc. All rights reserved.  

 var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,propNum,theObj,firstTime=false;  

 if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time  

 tmLn = document.MM_Time[tmLnName];  

 if (myID == null) { myID =   tmLn.ID; firstTime=true;}//if new call, incr ID  

 if (myID == tmLn.ID) { //if Im newest  

  setTimeout(’MM_timelinePlay("’ tmLnName ’",’ myID ’)’,tmLn.delay);  

  fNew =   tmLn.curFrame;  

  for (i=0; i<tmLn.length; i  ) {  

   sprite = tmLn;  

   if (sprite.charAt(0) == ’s’) {  

    if (sprite.obj) {  

     numKeyFr = sprite.keyFrames.length; firstKeyFr = sprite.keyFrames[0];  

     if (fNew >= firstKeyFr && fNew <= sprite.keyFrames[numKeyFr-1]) {//in range  

      keyFrm=1;  

      for (j=0; j<sprite.values.length; j  ) {  

       props = sprite.values[j];  

       if (numKeyFr != props.length) {  

        if (props.prop2 == null) sprite.obj[props.prop] = props[fNew-firstKeyFr];  

        else    sprite.obj[props.prop2][props.prop] = props[fNew-firstKeyFr];  

       } else {  

        while (keyFrm<numKeyFr && fNew>=sprite.keyFrames[keyFrm]) keyFrm  ;  

        if (firstTime || fNew==sprite.keyFrames[keyFrm-1]) {  

         if (props.prop2 == null) sprite.obj[props.prop] = props[keyFrm-1];  

         else    sprite.obj[props.prop2][props.prop] = props[keyFrm-1];  

    } } } } }  

   } else if (sprite.charAt(0)==’b’ && fNew == sprite.frame) eval(sprite.value);  

   if (fNew > tmLn.lastFrame) tmLn.ID = 0;  

 } }  

}  



function MM_initTimelines() { //v4.0  

  //MM_initTimelines() Copyright 1997 Macromedia, Inc. All rights reserved.  

  var ns = navigator.appName == "Netscape";  

  var ns4 = (ns && parseInt(navigator.appVersion) == 4);  

  var ns5 = (ns && parseInt(navigator.appVersion) > 4);  

  document.MM_Time = new Array(1);  

  document.MM_Time[0] = new Array(1);  

document.MM_Time["Timeline1"] = document.MM_Time[0];  

  document.MM_Time[0].MM_Name = "Timeline1";  

  document.MM_Time[0].fps = 15;  

  document.MM_Time[0][0] = new String("sprite");  

  document.MM_Time[0][0].slot = 1;  

  if (ns4)  

    document.MM_Time[0][0].obj = document["Layer1"];  

  else if (ns5)  

    document.MM_Time[0][0].obj = document.getElementById("Layer1");  

  else  

    document.MM_Time[0][0].obj = document.all ? document.all["Layer1"] : null;  

  document.MM_Time[0][0].keyFrames = new Array(1, 15);  

  document.MM_Time[0][0].values = new Array(2);  

  if (ns5)  

    document.MM_Time[0][0].values[0] = new Array("30px", "34px", "39px", "43px", "47px", "52px", "56px", "61px", "65px", "69px",  

"74px", "78px", "82px", "87px", "91px");  

  else  

    document.MM_Time[0][0].values[0] = new Array(30,34,39,43,47,52,56,61,65,69,74,78,82,87,91);  

  document.MM_Time[0][0].values[0].prop = "left";  

  if (ns

IE最新高危漏洞非官方补丁


        

微软IE团队日前刚刚确认了一个可导致IE6.x和IE7崩溃的高危漏洞,相关攻击代码已经现身,据称已有数百家网站可被用来引发漏洞攻击。

IE的这一漏洞主要出现在浏览器*作CreateTextRange()函数的过程中。该漏洞最早由安全公司Secunia发现并通报。微软在予以确认后表示会发布相关补丁,但需要等到4月11日的下一个补丁发布日。微软还建议IE用户关闭Active Scripting功能以预防可能的攻击。

由于微软的官方补丁要半个月之后才能到来,著名安全公司eEye Digital Security已经提供了一个自己开发的安全补丁。用户可以使用该补丁关闭Active Scripting功能、启用eEye Blink安全保护或者修正漏洞。补丁安装后可随时卸载,安装未来的微软官方补丁后也会自动卸载。

eEye IE JScript补丁适用系统:Windows NT 4.0、98、ME、2000 SP4、XP SP1/SP2、Server 2003;Internet Explorer 5.01 SP4、6.0、6.0 SP1、6.0 SP2(On Windows XP SP2)

点击下载eEye IE JScript安全补丁:http://www.eeye.com/html/research/tools/JScriptPatchSetup.exe点击查看eEye IE JScript补丁源代码:http://www.eeye.com/html/research/tools/JScriptPatchSource.txt

关于影响网吧线路病毒的解决方法


      近段时间很多网吧反映频繁掉线,我公司多次检查,均排除网络故障引起。2月7日经过查处,确认目前引起网吧掉线的原因是病毒引起,该问题在全省均有发生,该病毒对主机代理和路由器代理的网吧均会造成影响。



该病毒发作时候的特征为,中毒的机器会伪造某台电脑的MAC地址,如该伪造地址为网关服务器的地址,那么对整个网吧均会造成影响,用户表现为上网经常瞬断。



一、在任意客户机上进入命令提示符(或MS-DOS方式),用arp –a命令查看:

C:\WINNT\system32>arp -a



Interface: 192.168.0.193 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-50-da-8a-62-2c dynamic

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic



可以看到有两个机器的MAC地址相同,那么实际检查结果为 00-50-da-8a-62-2c为192.168.0.24的MAC地址,192.168.0.1的实际MAC地址为00-02-ba-0b-04-32,我们可以判定192.168.0.24实际上为有病毒的机器,它伪造了192.168.0.1的MAC地址。



二、在192.168.0.24上进入命令提示符(或MS-DOS方式),用arp –a命令查看:

C:\WINNT\system32>arp -a

Interface: 192.168.0.24 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-02-ba-0b-04-32 dynamic

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.193 00-11-2f-b2-9d-17 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic



可以看到带病毒的机器上显示的MAC地址是正确的,而且该机运行速度缓慢,应该为所有流量在二层通过该机进行转发而导致,该机重启后网吧内所有电脑都不能上网,只有等arp刷新MAC地址后才正常,一般在2、3分钟左右。



三、如果主机可以进入dos窗口,用arp –a命令可以看到类似下面的现象:

C:\WINNT\system32>arp -a

Interface: 192.168.0.1 on Interface 0x1000004

Internet Address Physical Address Type

192.168.0.23 00-50-da-8a-62-2c dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-50-da-8a-62-2c dynamic

192.168.0.193 00-50-da-8a-62-2c dynamic

192.168.0.200 00-50-da-8a-62-2c dynamic



该病毒不发作的时候,在代理服务器上看到的地址情况如下:

C:\WINNT\system32>arp -a

Interface: 192.168.0.1 on Interface 0x1000004

Internet Address Physical Address Type

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.193 00-11-2f-b2-9d-17 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic  



病毒发作的时候,可以看到所有的ip地址的mac地址被修改为00-50-da-8a-62-2c,正常的时候可以看到MAC地址均不会相同。



解决办法:

一、采用客户机及网关服务器上进行静态ARP绑定的办法来解决。

1. 在所有的客户端机器上做网关服务器的ARP静态绑定。

首先在网关服务器(代理主机)的电脑上查看本机MAC地址

C:\WINNT\system32>ipconfig /all

Ethernet adapter 本地连接 2:

Connection-specific DNS Suffix . :

Description . . . . . . . . . . . : Intel® PRO/100B PCI Adapter (TX)

Physical Address. . . . . . . . . : 00-02-ba-0b-04-32

Dhcp Enabled. . . . . . . . . . . : No

IP Address. . . . . . . . . . . . : 192.168.0.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

然后在客户机器的DOS命令下做ARP的静态绑定

C:\WINNT\system32>arp –s 192.168.0.1 00-02-ba-0b-04-32

注:如有条件,建议在客户机上做所有其他客户机的IP和MAC地址绑定。



2. 在网关服务器(代理主机)的电脑上做客户机器的ARP静态绑定

首先在所有的客户端机器上查看IP和MAC地址,命令如上。

然后在代理主机上做所有客户端服务器的ARP静态绑定。如:

C:\winnt\system32> arp –s 192.168.0.23 00-11-2f-43-81-8b

C:\winnt\system32> arp –s 192.168.0.24 00-50-da-8a-62-2c

C:\winnt\system32> arp –s 192.168.0.25 00-05-5d-ff-a8-87

。。。。。。。。。



3. 以上ARP的静态绑定最后做成一个windows自启动文件,让电脑一启动就执行以上操作,保证配置不丢失。



二、有条件的网吧可以在交换机内进行IP地址与MAC地址绑定



三、IP和MAC进行绑定后,更换网卡需要重新绑定,因此建议在客户机安装杀毒软件来解决此类问题:该网吧发现的病毒是变速齿轮2.04B中带的,病毒程序在 http://www.wgwang.com/list/3007.html 可下载到:



1、 KAV(卡巴斯基),可杀除该病毒,病毒命名为:TrojanDropper.Win32.Juntador.c

杀毒信息:07.02.2005 10:48:00 C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5\B005Z0K9\Gear_Setup[1].exe infected TrojanDropper.Win32.Juntador.c



2、 瑞星可杀除该病毒,病毒命名为:TrojanDropper.Win32.Juntador.f



3、 另:别的地市报金山毒霸和瑞星命名:“密码助手”木马病毒(Win32.Troj.Mir2)或Win32.Troj.Zypsw.33952的病毒也有类似情况。

局域网面对攻击的安全策略(图)


        局域网的安全问题经常是面对来自Internet的攻击,因此你必须时刻防范这些恶意攻击,关注你局域网的计算机系统安全。   在这篇文章里我们谈一谈网络攻击的机制,同时也着重讲述一下局域网系统避免遭受攻击的方法。   这里我们使用网络协议分层模式来分析局域网的安全。从图1可以看到,网络的七层在不同程度上会遭受到不同方式的攻击,如果攻击者取得成功,那将是非常危险的。而我们通常听到或见到的攻击往往发生在应用层,这些攻击主要是针对Web服务器、浏览器和他们访问到的信息,比较常见的还有攻击开放的文件系统部分。   下面两个方法从实践上来说被认为是非常有用的防范手段。   1.包过滤   

  图1 七层模型易遭受的安全攻击   在网络层检查通信数据,观察它的源地址和目的地址。过滤器可以禁止特定的地址或地址范围传出或进入,也可以禁止令人怀疑的地址模式。   2.防火墙   



  图2 包过滤器的配置   在应用层检查通信数据,检查消息地址中的端口,或检查特定应用的消息内容。测试失败的任何通信数据将被拒绝。   一、路由包过滤   TCP/IP地址由机器地址和标识程序处理消息的端口数字组成。这个地址/端口组合信息对每个TCP/IP消息都是有效的。包过滤与防火墙相比处理的简单一些,它仅是观察TCP/IP地址,而不是端口数字或消息内容。不过包过滤提供给你的是很好的网络安全工具。   包过滤器通常使用的是自顶向下的操作原则,下面是它使用的一个典型规则:   ●允许所有传出通信数据通过;   ●拒绝建立新的传入连接;   ●其它的数据可以全部被接受。   通过这样的使用规则,系统的安全性提高了许多。因为它拒绝了Internet上主动与你的计算机建立新连接的请求。它阻止使用TCP的通信数据进入,从而杜绝了对共享驱动器和文件的未授权访问。   过滤器通常的应用是配置在连接你的计算机和Internet的路由器上,如图2所示。在你的局域网和Internet之间放置过滤器后,就可以保证局域网与Internet所有的通信数据都要经过过滤器。   如果包过滤软件有能力检查源地址子网,从子网物理端口传递消息到路由器,你就可以制定规则来避免虚假的TCP/IP地址,就象图2所示的那样。攻击者欺骗的方法就是把来自Internet的消息伪装成来自你局域网的消息。包过滤通过拒收带有不可能源地址的消息来防御攻击者的攻击。例如,假定你在一个装有Linux的机器上安装软件,让它作为一个Windows网络文件服务器,你可以配置Linux让它拒收所有来自你的子网以外的通信数据,阻止Internet上的机器看到这个文件服务器。如果攻击者假装是你内部的机器,用过滤器就可以阻止攻击者的攻击。

  包过滤虽然对网络的安全防范能起到很好的作用,但包过滤也并不是万能的。它们一般不能防御使用UDP协议的攻击,因为过滤器不能拒收开放的消息。包过滤还不能防御低层攻击,象PING方式的攻击。   二、防火墙   使用防火墙软件可以在一定程度上控制局域网和Internet之间传递的数据。图3所示是一个TCP/IP数据包报头示意图,从它上面可以清楚地看到包过滤和防火墙工作原理的不同之处。防火墙不但检查了包过滤检查内容的所有部分(TCP/IP的源地址和目的地址),还检查了源/目的端口数字和包的内容。   



  图3 包过滤器和防火墙的信息源   端口和消息内容这些信息使防火墙比包过滤有更强的防范能力,因为这些信息使防火墙控制特定进/出的主机地址。防火墙的功能有以下几个方面:   ●允许或禁止特定的应用服务,例如:FTP或Web页面服务;   ●允许或禁止访问基于被传递的信息内容的服务。   防火墙最直接的实施就是使用图2所示的结构,仅把局域网和ISP之间的包过滤器换成防火墙就可以了。这是一个防火墙的最安全的应用,因为它保护了防火墙后面的所有计算机。   



  图4 防火墙中使用DMZ   如果我们把图2改为图4所示的结构,就可以很好地解决这个问题。图4的结构中有3个端口。第三个端口连接的是另一个局域网,通常叫做DMZ(非军事区)。DMZ中的计算机与安全局域网中的计算机相比安全性要差一些,但是这些计算机可以接受来自Internet的访问。你可以把Web和FTP服务器放在DMZ,从而可以保护其它的计算机。防火墙上的规则设定为阻止进入安全局域网的通信数据,仅允许传出连接的建立。   如果你想增强DMZ局域网的安全性,可以使用过滤器,限制局域网中服务器使用的端口,禁止那些来自攻击站点的访问。   为了安全还可以给你的局域网分段,每段设置一个防火墙,每个防火墙使用不同的安全规则。需要记住的一点是,防火墙本身并没有保障安全的能力,你需要定期的检查防火墙对可疑事件做出的日志记录,还需要去发现和使用软件的安全补丁。   如果你使用Windows 98第二版的Internet共享连接功能,让你的一台计算机通过Modem把局域网连接上Internet。在这种情况下,你的网络是很不安全的,仍需要改善网络的安全性。最大的威胁就是你的电脑直接连接在了Internet上,你应该直接在这台电脑上安装包过滤器或防火墙产品,或让你的ISP安装包过滤器或防火墙来保护你的访问。

在ASP.NET中防止注入攻击


      目的:     对输入的字串长度,范围,格式和类型进行约束.      在开发ASP.NET程序时使用请求验证防止注入攻击.      使用ASP.NET验证控件进行输入验证.      对不安全的输出编码.      使用命令参数集模式防止注入攻击.      防止错误的详细信息被返回到客户端.        概述 :       你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和IP地址等.       弱输入校验通常为注入攻击提供了机会.下面是常见的利用弱输入校验或无输入校验进行攻击的手段.     SQL 注入(SQL injection). 如果你使用用户的输入值来动态构造SQL语句,那么数据库可能执行攻击性的有害SQL语句.      跨站脚本(Cross-site scripting). 跨站脚本攻击利用网页验证漏洞注入客户端脚本.接下来这些代码被发送到受信任的客户端电脑上并被浏览器解释执行.因为这些代码来自受信任的站点,所以浏览器无法得知这些代码是有害的.      未授权的文件访问(Unauthorized file access).如果你的代码从调用者那里接受输入,恶意用户可以看到你对文件的操作过程从而访问那些受保护的文件或者使用你的代码注入非法数据.        注意 : 注入攻击可通过使用HTTP或HTTPS Secure Socket Layer(SSL) 连接. 传输加密技术不能用来防御攻击.       通常的输入验证方法总结如下.你应在所有的需要通过网络输入的地方进行验证,比如文本框和其它表单输入字段, 查询字串参数,cookies,服务器端变量和网络方法参数.注意,过滤策略应该是只允许正确的输入然后拒绝非法输入.这是因为定义正确的输入策略比过滤所有的非法输入要容易,那通常很难包括所有的非法输入.       通入如下几个方面验证输入内容:     约束.验证是否输入的是正确的类型,字符长度,格式和范围.可以应用ASP.NET验证控件来约束服务器控件输入.约束其它来源的输入可以使用正则表达式和自定义的验证规则.      拒绝.检测已知的有害数据输入并拒绝.      过滤.有时候你会希望过滤掉用户输入中那些有安全隐患的那些部分.例如,你的程序允许自由格式的输入,比如备注字段,你会允许特定的安全HTML标记象,及其它的HTML标记.        步骤提要       通过以下步骤保护你的ASP.NET程序不受注入式攻击危害 :     第一步.使用ASP.NET请求验证.      第二步.约束输入.      第三步.对不安全的输出进行编码.      第四步.对SQL查询语句使用命令参数.      第五步.验证ASP.NET的出错信息没有泄漏至客户端.        下面的章节将对这些步骤进行详细讨论.       第一步.使用ASP.NET请求验证.       默认地,ASP.NET 1.1和2.0请求验证会对送至服务器的数据检测是否含有HTML标记元素和保留字符.这可以防止用户向程序中输入脚本.请求验证会对照一个有潜在威胁的字符串列表进行匹配,如果发现异常它会抛出一个HttpRequestValidationException类型的异常.       你可以在你的web.config文件中的元素中加入validateRequest="false" 或在单独的页面的@Pages元素里面设置ValidateRequest = "false"来禁用此项功能.       如果你想禁用请求验证功能,你可以仅在需要的页面禁用它.比如你在程序页面上包含一个可接受HTML格式输入的字段.       确定在Machine.config文件中请求验证功能被打开.             请求验证功能在ASP.NET中被默认启用.你可以在Machine.config.comments文件中看到如下的默认设置.             确认你没有修改你的服务器的Machine.config和应用程序的Web.config文件里的默认设置.       测试ASP.NET请求验证       你可以测试请求验证的作用.创建一个ASP.NET页面通过设置ValidateRequest = "fasle"禁用请求验证,代码如下 :      <%@ Language="C#" ValidateRequest="false" %>                       
                                    当你运行页面的时候,"Hello"被显示在一个消息框中,因为在txtString中的脚本被执行并被客户端的浏览器处理.       如果你设置ValidateRequest = "true" 或者移除ValidateRequest页面属性,ASP.NET请求验证会拒绝脚本输入并抛出一个象下面这样的错误信息.       A potentially dangerous Request.Form value was detected from the client (txtString="