我有意(在测试中)在WebMatrix C#中分配了以下变量:
string val = "<script type='text/javascript'>alert('XSS Vector')</script>";
稍后在页面中我使用razor将该值直接写入页面。
<p>
@val
</p>
它写文本,但是以安全的方式(即没有运行警报脚本)
这一点,再加上如果'val'包含一个html实体(例如,<
),它也会写出“<
”而不是“&lt;”正如我希望页面呈现。
这是因为C#首先运行,然后呈现html吗?
更重要的是,以这种方式使用剃须刀是一种合适的替代html编码,当这样使用时?
答案 0 :(得分:1)
@Variable
语法将HtmlEncode传递给它的任何文本;因此,您可以从字面上看到您设置为字符串值的内容。你是正确的,这是为了XSS保护。这是Razor的一部分; @Variable
语法本身。
基本上,使用@Variable
语法并不是Html编码的“替代”;它是 HTML编码。
相关:如果您想要某些字符串呈现 HTML,您可以在Razor中使用此语法:
@Html.Raw(Variable)
这会导致Html编码不。显然,这对用户提供的输入很危险。