我正在开发一个数学网站使用Asp.Net MVC3+剃刀+ MathJax。MathJax是一个用于在web浏览器上呈现TeX或LaTeX代码的javascript库。并且TeX或LaTeX代码表示数学内容,诸如内联数学$y=mx+c$
和显示的数学\[y=mx+c\]
。
现在,我的网站可以接受输入,例如$x<y$
。然而,它不能接受$x<y>z$
,因为框架认为这个输入容易受到XSS和XSRF的攻击。
简而言之,我应该做什么来完成我想要的,但它不会打开安全漏洞。
发布于 2011-03-03 07:22:35
在ASP.NET MVC3中,您可以使用[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 MVC3使用的)中将不起作用:
<httpRuntime requestValidationMode="2.0"/>
发布于 2011-03-03 07:11:01
您应该在操作方法上使用ValidateInputAttribute
[ValidateInput(false)]
public ViewResult Create() {
}
编辑
如果您使用的是.net 4,不要忘记将<httpRuntime requestValidationMode="2.0"/>
添加到web.config
中,如下所示
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</configuration>
https://stackoverflow.com/questions/5177630
复制相似问题