目前,当尝试提交包含下拉列表的事务时,该下拉列表包含含有角括号的文本,例如"<abcd>"
,默认情况下我从ValidateRequest=true
收到500内部服务器错误,并且在它到达页面处理程序之前抛出未处理的异常,因为它的跨站点脚本问题。
有没有办法拦截和修改HttpModule
或Glabal.asax
中的请求对象,因为我知道Request对象是只读的。
我已经打破了近三天,但却无法得到具体的解决方案。 什么是处理这类场景的最佳解决方案。此外,我不想在客户端对其进行编码。
答案 0 :(得分:3)
对列表框中的值进行编码:
<asp:ListItem><abcd></asp:ListItem>
[编辑] 我意识到我的解决方案不适用。内容可能由浏览器编码发送,并由下拉列表进行渲染编码(如果使用标准数据绑定)。我认为您唯一的选择是禁用请求的验证。
这意味着您必须非常小心用户输入。简单来说,使用HttpUtility.HtmlEncode(txtXX.Text);
对每个用户输入进行编码。
有关详细信息,请参阅MSDN的Script Exploits Overview页。
答案 1 :(得分:1)
使用HttpUtility.HtmlEncode和HttpUtility.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以限制任何跨站点攻击。