Как разрешить моему веб-приложению Asp.net MVC 3, использующему MathJax, принимать пользовательский ввод $ x <y>z $? - PullRequest
1 голос
/ 03 марта 2011

Я занимаюсь разработкой математического сайта с использованием Asp.Net MVC 3 + Razor + MathJax.MathJax - это библиотека javascript для отображения кодов TeX или LaTeX в веб-браузере.А коды TeX или LaTeX представляют математическое содержимое, такое как встроенная математика $y=mx+c$ и отображаемая математика \[y=mx+c\].

. Прямо сейчас мой сайт может принимать входные данные, например, $x<y$.Однако он не может принять $x<y>z$, потому что среда учитывает этот ввод, уязвим для XSS и XSRF.

Короче говоря, что я должен делать, чтобы выполнить то, что я хочу, но это не открывает уязвимость безопасности.

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

В 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"/>
2 голосов
/ 03 марта 2011

Вы должны использовать ValidateInputAttribute в вашем методе действия

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

}

Редактировать

И если вы используете .net 4, не забудьте добавить <httpRuntime requestValidationMode="2.0"/> к web.config следующим образом

<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</configuration>
...