asp.net MVC кодировать в форме сообщения - PullRequest
2 голосов
/ 28 апреля 2010

Я использую текстовый редактор в моей форме asp.net mvc (nicedit с textarea), и когда я отправляю форму по почте, потому что она не закодирована в формате html, я получаю следующее сообщение: Msgstr "В клиенте обнаружено потенциально опасное значение Request.Form". Как я могу html кодировать текстовые сообщения? Я не хочу отменить проверку. Есть ли способ использовать помощник html.encode при отправке?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 28 апреля 2010

Вы можете украсить действие, обрабатывающее сообщение формы, с помощью ValidateInputAttribute :

[ValidateInput(false)]
[HttpPost]
public ActionResult SomeActionToHandleFormSubmission() 
{
    ...
}
1 голос
/ 01 декабря 2016

Вместо того, чтобы выключать ValidateInput, так как тогда вы открыты для уязвимостей, вы можете использовать Javascript для кодирования специальных символов. Это позволяет не выкидывать сообщение об ошибке:

Потенциально опасное значение Request.Form было обнаружено из клиент

для некоторых простых входных данных (таких как электронные письма в формате MyName<me@somewhere.com>), но все еще с встроенной функцией MVC, чтобы следить за другими инъекциями скрипта. Конечно, если вам нужен ввод в правильном формате на сервере, вам придется декодировать его и быть осторожным, если вы выводите его снова

Если вы уже используете jQuery, его можно легко добавить ко всем полям ввода следующим образом

$("input").on("change", function() {
    $(this).val(htmlEscape($(this).val()));
});

htmlEscape вот моя собственная функция для изменения специальных символов.

function htmlEscape(str) {
    return str
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}

В зависимости от ваших потребностей, вы можете захотеть экранировать все символы, используя встроенную функцию Javascript encodeURI или расширить вышеуказанную функцию, например:

function htmlEscape(str) {
    return str
        .replace(/&/g, '&amp;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}
0 голосов
/ 24 ноября 2017

Декорирование поля с помощью AllowHtml выполнит работу, не опуская логику проверки. Это решило проблему в моем случае без кодирования / декодирования.

[System.Web.Mvc.AllowHtml]
public string YourField { get; set; }
0 голосов
/ 30 апреля 2010

Вы используете .net 4.0? Если так, то вам также понадобится

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

в вашем файле config.web.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...