解决方法
If ASP.NET Request Validation is enabled for a site,do you still need to HtmlEncode
ASP.NET请求验证是一个黑客,试图解决愚蠢的作者的破坏的程序.不要写破坏的程序.
您写入HTML页面的任何文本字符串必须是HTML编码的;这是一个正确的问题,而不仅仅是安全性(这是正确性的一个子集).即使请求验证可能会神奇地删除任何可能的XSS攻击(并不是这样的情况),否则HtmlEncode文本输出仍然会导致生成格式错误的输出,破坏您的数据.说我正在做一个论坛,谈论一些变量a,b和c,并想说:
a<b b>c b>a
如果这被回覆到没有编码的HTML源代码,我会得到:
ac b>a
也许网页的其余部分也是大胆的.哎呦!
请求验证是假的,不应该依赖.默认情况下,“推荐用于所有生产环境”是令人难过的,这使我非常怀疑ASP.NET团队的健全性.
如果你正确地编写了你的程序,你不需要它,它只会让你的方式. (例如,如果SO使用它,我将无法使这篇文章提到< script>标签.)如果您没有正确地编写程序,请求验证不会修复您的安全漏洞这只会使它们更加模糊不清.
and HtmlDecode string information
你通常不会在网络应用程序中使用HtmlDecode任何东西.编码将内容推送到HTML中,但是当内容从提交的表单中恢复时,它是纯文本,而不是HTML编码.
to and from simple forms (e.g. ASP TextBoxes)?
文本框应该很好设置它们的.Text确实做任何必要的编码,使您在文本框中显示的确切字符串.但.一些看起来像是HTML编码的东西实际上并不会.例如:
myTextBox.Text= "a<b b>c"; // Fine! myLabel.Text= "a<b b>c"; // Broken!
噢亲爱的.文字并不总是意味着文字. Sometimes,it actually means HTML.谢谢微软的方式,泥泞一个话题的水域太多人已经很难理解了.