处理ASP.Net中的角括号

时间:2012-01-05 10:15:58

标签: c# asp.net httphandler httpmodule

目前,当尝试提交包含下拉列表的事务时,该下拉列表包含含有角括号的文本,例如"<abcd>",默认情况下我从ValidateRequest=true收到500内部服务器错误,并且在它到达页面处理程序之前抛出未处理的异常,因为它的跨站点脚本问题。

有没有办法拦截和修改HttpModuleGlabal.asax中的请求对象,因为我知道Request对象是只读的。

我已经打破了近三天,但却无法得到具体的解决方案。 什么是处理这类场景的最佳解决方案。此外,我不想在客户端对其进行编码。

3 个答案:

答案 0 :(得分:3)

对列表框中的值进行编码:

<asp:ListItem>&lt;abcd&gt;</asp:ListItem>

[编辑] 我意识到我的解决方案不适用。内容可能由浏览器编码发送,并由下拉列表进行渲染编码(如果使用标准数据绑定)。我认为您唯一的选择是禁用请求的验证。

这意味着您必须非常小心用户输入。简单来说,使用HttpUtility.HtmlEncode(txtXX.Text);对每个用户输入进行编码。

有关详细信息,请参阅MSDN的Script Exploits Overview页。

答案 1 :(得分:1)

使用HttpUtility.HtmlEncodeHttpUtility.HtmlDecode解决此问题。

您可以将html编码的文本放在控件中,或根据您的要求使用这些方法(在事件之间)

遵循这些SO线程......
HttpUtility.HtmlEncode to validate user entries
w3c validation error in asp.net

如果您可以禁用验证,请按照这些进行操作 asp.net: Invalid postback or callback argument

检查MSDN的Script Exploits

答案 2 :(得分:0)

我更喜欢使用Microsoft Anti-Cross Site Scripting Library V4.0,因为它提供了许多辅助函数来编码HTML,HtmlAttribute,JavaScript,URL,XML以限制任何跨站点攻击。