处理 ASP.Net 中的角括号

3

目前,当尝试提交包含下拉菜单的交易时,如果下拉菜单中的文本包含角括号,例如"<abcd>",由于ValidateRequest=true,会默认抛出跨站脚本问题未处理的异常,导致500内部服务器错误。

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

我已经苦苦思索了将近三天,但无法得到一个具体的解决方案。如何处理这些情况才是最好的解决方案?同时,我不想在客户端对其进行编码。


你如何填充列表框? - Steve B
这是一个下拉菜单而不是列表框。我将下拉菜单绑定到数据表。数据表包含文本可能具有<abc>值的数据。 - Syed
展示数据源和下拉菜单的定义...标准的数据绑定会进行HTML编码。 - Steve B
3个回答

3

在列表框中编码数值 :

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

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

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

有关更多信息,请参阅MSDN的Script Exploits Overview页面。


但是对于最终用户来说,如果在界面上看到那些字符(即<或>),它们会显得非常混乱。我想在单击提交按钮时处理“<abc>”的回发。 - Syed
1
它将由浏览器解码。这是表示html语法使用的字符的标准方式:http://www.w3.org/TR/html4/charset.html#h-5.3.2 - Steve B
我不想将ValidateRequest设置为false,而是寻找一种通用解决方案,在其中可以处理请求并进行修改。可能我没有走对路。我尝试使用HttpModule,但在修改请求对象时失败了。 - Syed
为什么你不想将ValidateRequest设置为false?如果小心使用,它比挂钩请求来修补数据要简单得多。 - Steve B

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接