由于Textbox内容而导致PageRequestManagerServerErrorException

时间:2012-11-29 09:48:52

标签: c# asp.net .net

我有一个非常奇怪的问题。我花了一段时间才追查。当我将数据从数据库加载到一堆TextBox中时,基本上我得到一个Microsoft JScript运行时错误弹出窗口。

它在Sys.Observer.RaiseEvent(this,“endRequest”,eventArgs)之后被抛出 我已经看到这个错误可以被忽略,但是在它被抛出之后我的更新面板中没有回发触发器。按钮不起作用,具有AutoPostbacks的列表框不会触发。

所以最终我将它追溯到一个文本框。如果我不填充它一切正常。

textbos正在填充:

    MO-SU 0700-0230        <<SEE GEN INFO>>        <<HRS T-1 ONLY>>

我的第一个念头是那里必须有一个转义字符,或者某些东西弄乱了更新面板。我打算删除“&lt;&lt;”和“&gt;&gt;”,但我只是想知道是否有人能解释为什么会这样。

2 个答案:

答案 0 :(得分:2)

归因于<<&amp; >>此部分帖子被服务器视为XSS攻击。由于您使用包含<>的字符串加载文本框,因此下次将其发布到服务器,因为<script>标记也会以&lt; &GT;  字符服务器检查XSS敏感字符并拒绝请求。 在发布数据和在服务器控件中加载数据时,使用asp.net提供的HTTPUtility.HtmlEncodeHTTPUtility.HtmlDecode方法发布这样的数据总是很好的。  见以下例子: -

string DecHtml = HttpUtility.HtmlDecode(value1);
string EncHtml = HttpUtility.HtmlEncode(value2);

查找有关HTMLEncode输入的More info 如果您想了解XSS,请遵循this

幸运的是,我们可以在ASPX的page指令中关闭验证:

<%@ Page Language="C#" MasterPageFile="~/Site.Master"
AutoEventWireup="true" CodeBehind="webpage.aspx.cs"
Inherits="Web.webpage" Title="webpageSite" ValidateRequest="false" %>

或者,可以在web.config中的整个站点上关闭请求验证:

<pages validateRequest="false" />

for .NET 4.0 在.NET 4请求验证模式下运行时,您无法再在页面级别将其关闭。为了能够禁用验证,我们需要请求web.config回退到2.0验证模式:

<httpRuntime requestValidationMode="2.0" />

坦率地说,这根本不是一个聪明的主意,除非你有一个很好的理由想要从网站的每一页中删除这个安全网。因此,IMHO的最佳方法是尽可能使用编码和解码。 查找更多here

答案 1 :(得分:1)

更改页面设置ValidateRequestMode但是您应该手动检查所有用户输入以防止攻击。