我有一个表单中的文本框,需要接受带有 HTML 标签的输入。
提交带有 HTML 标记的输入会使应用程序抛出 HttpRequestValidationException
,除非我们使用 HttpUtility.HtmlEncode
。到目前为止很简单。
但是,输入也可能包含符号,例如“度”符号 (°)。当这些也是 HTML 编码时,它们变成数字转义码,在本例中为 °
。这些代码也会导致抛出 HttpRequestValidationException
,但问题是为什么?
我不明白为什么数字转义码被认为具有潜在危险,尤其是当 °
作为输入正常工作时。
我似乎被卡住了,因为标签导致输入按原样失败,而 HTML 编码输入由于数字转义而失败。到目前为止,我的解决方案是 HTML 编码,然后正则表达式用 HTML 解码形式替换转义序列,但我不确定这是否是一个安全的解决方案,因为我认为转义序列被视为危险是有原因的。
最佳答案
这是由于 ASP.NET 内置 Cross Site Scripting验证能力。有一些 ASP.NET 允许的和不允许的列表,这里是:ASP.NET request validation causes: is there a list?
关于 # 编码字符的具体情况,这里有完整的 XSS 攻击引用:XSS (Cross Site Scripting) Cheat Sheet这证明了这些攻击有多么复杂,以及为什么禁止使用编码字符。
关于c# - 使用 HTML 编码字符的 ASP.NET 请求验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750130/