【发布时间】:2013-11-20 21:42:44
【问题描述】:
我目前正在努力解决我网站上的一个重大永久性 XSS 漏洞。为此,我呼吁:
this.Title = System.Security.SecurityElement.Escape(this.Title);
在我输入的值上,它正确地转义了所有需要转义的字符(、& 等)。当我在页面的其他地方显示这个标题时,我的问题就出现了:
<p> @title </p>
完全按原样显示字符串,例如“< ;> ;, etc.”。
为了解决这个问题,我注意到如果我调用:
<p> @html.raw(title) </p>
这些值在页面上正确显示( 等)。但我担心这仍然会确保一个漏洞。将 html 正确呈现到页面上的最佳方法是什么?我做错什么了吗?还是我正确使用了 html.raw()?
【问题讨论】:
-
您可能根本不应该调用
Escape——只需让 Razor 自动编码您的输出即可。但是,如果我们假设应该使用Escape,那么是的,您正确使用了Raw。 -
只要输出是正确的 HTML 编码, < 就没有风险。 >等
标签: c# html asp.net security escaping