Опасный запрос из формы - как избежать - PullRequest
0 голосов
/ 03 марта 2011

Я пытаюсь отправить тело моей веб-страницы в метод действия, чтобы я мог сохранить его в виде строки и позже сделать его частичным из другой части сайта.Я отправляю это так:

var input = 
            {
                id : GetGUIDValue(),
                html : $("body").html(),
                type : 'exposure'
            }
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("SaveAnalysis", "Indications") %>",
            data: input,
            success:function(data)
            {

            }
        });

Я поднял голову и нашел это и добавил его в свое заявление об открытии страницы:

ValidateRequest="false"

, в котором говорилось, что это отключится, но это не так.«т.Это представление в MVC2, так что, может быть, есть другой способ сделать это?Если нет ... как я могу отправить html тела моей страницы в действие, чтобы сохранить эту строку в переменной.

Спасибо!

РЕДАКТИРОВАТЬ:

ДействиеКод:

public ActionResult SaveAnalysis(Guid? id, string html, string type)
        {
            IndicationBase indication = CachedTransactionManager<IndicationBase>.GetCachedTransactions(id.Value);
            if (type == "Exposure")
            {
                indication.Model.ExposureExport = html;
            }
            else if (type == "Prepayment")
            {
                indication.Model.PrepaymentExport = html;
            }
            return Json("");
        }

Ответы [ 3 ]

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

Вы работаете в .NET 4.0? Если это так, вам нужно установить requestValidationMode в 2.0. Рик Страл написал в своем блоге хорошую статью . В основном вам нужно сделать следующее:

Установите requestValidationMode в вашем файле web.config:

<httpRuntime requestValidationMode="2.0" />

Украсьте свое действие с [ValidateInput(false)]

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

Вы захотите избежать запроса, используя javascript:

http://www.w3schools.com/jsref/jsref_escape.asp

На стороне C # вы можете кодировать / декодировать HTML для хранения и повторного рендеринга.Проблема в инъекционных атаках, поэтому C # выкрикивает каждый раз, когда вы разрешаете передачу html в виде простого текста.Когда вы знаете, что будете иметь дело с HTML, вы всегда должны кодировать его перед отправкой на контроллеры.

~ Vulgarbinary

Изменить, чтобы добавить новый синтаксис:

var input = 
            {
                id : GetGUIDValue(),
                html : escape($("body").html()),
                type : 'exposure'
            }
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("SaveAnalysis", "Indications") %>",
            data: input,
            success:function(data)
            {

            }
        });

Другое Редактирование:

Происхождение: http://kseesharp.blogspot.com/2008/01/c-equivalent-of-javascript-escape.html

Microsoft.JScript.GlobalObject.unescape("KC%27s%20trick%20/Hello") приведет к удалению вашей строки.Приносим извинения за задержку, я должен был изучить предыдущие примеры, которые у меня были, чтобы увидеть полный синтаксис unescape.

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

Украсьте свой метод действия с [ValidateInput(false)]

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