1

我正在使用 Asp.Net MVC 3 + Razor + MathJax 开发一个数学站点。MathJax 是一个 JavaScript 库,用于在 Web 浏览器上呈现 TeX 或 LaTeX 代码。TeX 或 LaTeX 代码表示数学内容,例如内联数学$y=mx+c$和显示数学\[y=mx+c\]

现在我的网站可以接受输入,例如,$x<y$. 但是它不能接受$x<y>z$,因为框架认为这个输入容易受到 XSS 和 XSRF 的攻击。

简而言之,我应该做些什么来完成我想要的,但它不会打开安全漏洞。

4

2 回答 2

3

在 ASP.NET MVC 3 中,您可以使用属性装饰需要接受此输入的模型的[AllowHtml]属性。这样,您就不会被迫禁用整个控制器操作的输入验证,这是以前通过使用[ValidateInput]属性装饰它来完成的。所以在你的模型上

public class MathematicsViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    [AllowHtml]
    public string MathematicFormula { get; set; }
}

然后让你的控制器动作:

[HttpPost]
public ActionResult(MathematicsViewModel model)
{
    // model.MathematicFormula will now accept input like  $x<y>z$
    ...
}

在您的视图中,您可以有一个名为的文本框MathematicFormula,用户可以在其中键入这些字符,并且您不会遇到异常。

另外不要忘记在 web.config 中设置以下内容,否则此属性在 .NET 4.0 中无效(这是 ASP.NET MVC 3 使用的):

<httpRuntime requestValidationMode="2.0"/>
于 2011-03-03T07:22:34.827 回答
2

您应该在您的操作方法上使用ValidateInputAttribute

[ValidateInput(false)]
public ViewResult Create() {

}

编辑

如果您使用.net 4,请不要忘记<httpRuntime requestValidationMode="2.0"/>添加web.config如下

<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</configuration>
于 2011-03-03T07:11:00.773 回答