.NET MVC3 HttpRequestValidation & JSON - PullRequest
1 голос
/ 16 мая 2011

Я новичок в фреймворке MVC3 (и .NET в целом; ветеран Java), так что потерпите меня, но здесь идет речь:

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

    var data = { "title": $titleField.val(), "content": $textArea.val(),
        "location": $location.val()
    };

    $.ajax(submitUrl,
        {
            type: "POST",
            contentType: "application/json; charset=utf-8",
            complete: function (data) {
                //blah blah
            },
            dataType: 'json',
            data: JSON.stringify(data)
        });
    }

Затем я получаювведите в моем действии:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult New(string title = "", string content = "", string location = "")
    {
    //yada yada
    }

При этом параметры сопоставляются, и пользователь может легко отправлять теги и т. д. Я не отключаю ValidateInput, и если я отправляю со стандартным POST и удаляю Stringify, он выдает ошибку, как и ожидалось.Любая веская причина, по которой данные JSONified пропускают проверку?

Редактировать - Более конкретный вопрос: если данные JSONified будут проходить HttpRequestValidation, как мы можем защитить от события, когда кто-то намеренно издевается над запросомотправлять данные в формате JSON вместо параметров post?Я не нашел способа заставить метод Action различать параметры, передаваемые как JSON, и передаваемые незашифрованные.

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Получил ответ на мой вопрос на asp.net - см. 2-й ответ.

Решение включает в себя замену ModelBinder по умолчанию.

0 голосов
/ 16 мая 2011

Есть ли какая-либо веская причина, по которой данные JSONified пропускают проверку?

Кодируется JSON =>, поэтому он гарантирует, что то, что проходит по сети, безопасно .При использовании JSON.stringify все опасные символы кодируются.

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