Fighting Ant

Ant can be great while elephant can be chickenshit

导航

<DIV>&nbsp;<SPAN id=ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry>&nbsp;
<DIV class=bvEntry id=entrycns!7771ff7c39de7784!245 bv:cns="cns!7771ff7c39de7784!245" bv:ca="true" bv:cat="计算机与 Internet">
<DIV id=LastMDatecns!7771ff7c39de7784!245>3/10/2006</DIV>
<H4 id=subjcns!7771ff7c39de7784!245 style="MARGIN-BOTTOM: 0px">A potentially dangerous Request</H4>
<DIV class=bvMsg id=msgcns!7771ff7c39de7784!245>
<DIV>
<P>问:我总是从 ASP.NET 页面中获得以下与 cookie 有关的错误:"A potentially dangerous Request.Cookies value was detected from the client: (W0073355_ID="...icVVWBPvb9OnploMFqAQ==")"。
<P>看起来好像是一些字符的组合引发了这个异常。如何才能改变这种行为呢?因为在等号之后没有任何文本,所以不需要标记该 cookie。
<P>答:正如您所知的那样,这是一个设计用来防止用 HTML 表单提交脚本的安全功能。虽然基本的 64 个字符在 cookie 值中没有一个是无效的,但是有一些组合却不能接受,包括:
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top>•
<TD>
<P>&lt;{a-z} </P>
<TR>
<TD vAlign=top>•
<TD>
<P>&lt;! </P>
<TR>
<TD vAlign=top>•
<TD>
<P>expression( </P>
<TR>
<TD vAlign=top>•
<TD>
<P>on{a-z}*= </P>
<TR>
<TD vAlign=top>•
<TD>
<P>&amp;# </P>
<TR>
<TD vAlign=top>•
<TD>
<P>script{space}*。</P></TD></TR></TBODY></TABLE>
<P>如果引发了 HttpRequestValidationException 异常,则解决这一问题的唯一方法就是禁止使用这些 cookie 来请求页面验证。然而,如果您禁止请求验证,则您自己必须对从用户接收到的任何输入执行验证,这一点非常重要。在 ASP.NET 1.1 中引入的请求验证功能被设计为抵御跨站点脚本攻击的第一道防线。没有此类验证,您的应用程序就很容易遭受此类攻击。
<P>&nbsp;
<P>简单解决方法:(禁用validateRequest)
<P>由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危<BR><BR>险性值。立马报错。<BR><BR>解决方案一:&nbsp;<BR>在.aspx文件头中加入这句:&nbsp;<BR>&lt;%@&nbsp;Page&nbsp;validateRequest="false"&nbsp;&nbsp;%&gt;&nbsp;<BR><BR>解决方案二:&nbsp;<BR>修改web.config文件:&nbsp;<BR>&lt;configuration&gt;&nbsp;<BR>&nbsp;&nbsp;&lt;system.web&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;pages&nbsp;validateRequest="false"&nbsp;/&gt;&nbsp;<BR>&nbsp;&nbsp;&lt;/system.web&gt;&nbsp;<BR>&lt;/configuration&gt;&nbsp;<BR><BR>因为validateRequest默认值为true。只要设为false即可。</P></DIV></DIV></DIV></SPAN></DIV>