2

我有目的地(用于测试)在 WebMatrix C# 中分配了以下变量:

string val = "<script type='text/javascript'>alert('XSS Vector')</script>";

在页面的后面,我使用 razor 将该值直接写入页面。

<p>
    @val
</p>

它以安全的方式写入文本(即不运行警报脚本)

这一点,再加上如果 'val' 包含一个 html 实体(例如,&lt;),它也会准确地写入“ &lt;”而不是“<”,因为我希望页面呈现。

这是因为 C# 先运行,然后再渲染 html 吗?

更重要的是,当这样使用时,以这种方式使用 razor 是否适合替代 html 编码?

4

1 回答 1

1

@Variable语法将对您传递给它的任何文本进行 HtmlEncode;因此,您可以从字面上看到您为字符串值设置的内容。您是正确的,因为这是用于 XSS 保护。这样做是 Razor 的一部分;@Variable语法本身。

所以基本上,使用@Variable语法并不是 Html 编码的“替代品”;它HTML 编码。

相关:如果您想要一些字符串来呈现HTML,您可以在 Razor 中使用以下语法:

@Html.Raw(Variable)

这会导致 Html 编码完成。显然,这对于用户提供的输入是危险的。

于 2013-02-22T22:25:38.940 回答