2

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

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

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

文本框越来越多:

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

我的第一个想法是那里一定有一个转义字符,或者有什么东西弄乱了更新面板。我将删除“<<”和“>>”,但我只是想知道是否有人可以解释为什么会发生这种情况。

4

2 回答 2

2

因此,<<>>的部分帖子被服务器视为 XSS 攻击。由于您使用包含字符串的文本框加载文本框,<并且>它将在下次发布到服务器并且由于<script>标签也以 < > 字符开始/结束服务器检查 XSS 敏感字符并拒绝请求。在服务器控件中发布数据和加载数据时,最好使用asp.net 提供的HTTPUtility.HtmlEncodeAnd方法发布这样的数据。HTTPUtility.HtmlDecode请参阅以下示例:-

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

查找有关 HTMLEncode 输入的更多信息如果你想了解 XSS,你应该遵循这个

不过幸运的是,我们可以在 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" />

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

<httpRuntime requestValidationMode="2.0" />

坦率地说,这根本不是一个聪明的主意,除非您有充分的理由要从站点的每个页面中删除此安全网。因此,恕我直言,最好的方法是尽可能使用编码和解码。在这里找到更多

于 2012-11-29T09:56:40.427 回答
1

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

于 2012-11-29T09:54:23.927 回答