было обнаружено потенциально опасное значение request.form, но validateinput (false) не работает - PullRequest
4 голосов
/ 19 марта 2010

Я установил VS2010 и MVC2 и тестирую простую форму с использованием tinyMCE.Когда я отправляю содержимое текстовой области в tinyMCE, я получаю страшный YSD и сообщение

"потенциально опасно ....."

Я виделэто раньше, поэтому я помещаю ValidateInput(false) в контроллер, но не радуюсь - все равно получаю ошибку.

код страницы в edit.aspx:

    <% using (Html.BeginForm()){ %>

    <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
    <textarea id="elm1" name="mceText" rows="15" cols="80" style="width: 80%">
        &lt;p&gt;
            This is some example text that you can edit inside the
  &lt;strong&gt; TinyMCE editor&lt;/strong&gt;.
    </textarea>

    <br />
    <input type="submit" name="save" value="Submit" />
    <input type="reset" name="reset" value="Reset" />
<%} %>

, а действие контроллера:

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateInput(false)]
    public ActionResult Edit(string mceText)
    {

        return View();
    }

Любые мысли - (я знаю, что код не завершен) пытался сделать это часами, но все просто говорят использовать ValidateInput (false)

Ответы [ 4 ]

5 голосов
/ 09 апреля 2010

Вот почему: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147

Функция проверки запросов в ASP.NET обеспечивает определенный уровень защиты по умолчанию от атак межсайтового скриптинга (XSS).В предыдущих версиях ASP.NET проверка запросов была включена по умолчанию.Однако он применяется только к страницам ASP.NET (файлам .aspx и их файлам классов) и только при выполнении этих страниц.

В ASP.NET 4 по умолчанию проверка запросов включена для всех запросов,потому что он включен до фазы BeginRequest HTTP-запроса.В результате проверка запросов применяется к запросам для всех ресурсов ASP.NET, а не только к запросам страниц ASPX.Это включает в себя такие запросы, как вызовы веб-службы и пользовательские обработчики HTTP.Проверка запросов также активна, когда пользовательские модули HTTP считывают содержимое HTTP-запроса.

В результате теперь могут возникать ошибки проверки запросов для запросов, которые ранее не вызывали ошибок.Чтобы вернуться к поведению функции проверки запросов ASP.NET 2.0, добавьте следующий параметр в файл Web.config:

<httpRuntime requestValidationMode="2.0" />

Однако мы рекомендуем проанализировать любой запросошибки проверки, чтобы определить, имеют ли существующие обработчики, модули или другой пользовательский код доступ к потенциально небезопасным входам HTTP, которые могут быть векторами атаки XSS.

5 голосов
/ 01 декабря 2011

Лучшим решением может быть использование опции кодировки tinymce:

http://www.tinymce.com/wiki.php/Configuration:encoding

tinyMCE.init({
        ...
        encoding : "xml"
});

затем используйте HttpUtility.HtmlDecode, чтобы декодировать его, как требуется.

Смотри здесь http://blog.tentaclesoftware.com/archive/2010/07/22/96.aspx

3 голосов
/ 15 декабря 2011

С одинарными кавычками just: encoding: "xml" кодируются: & # 39, но проверка ASP.NET считает, что в качестве уязвимости безопасности мы должны заменить все & # 39 на HTML & amp:

tinyMCE.init({
 // ...
 encoding: "xml",
 setup: function (ed) {
 ed.onSaveContent.add(function (ed, o) {
 o.content = o.content.replace(/&#39/g, "&apos");
 });
 }
});

Спасибо, Эдди.

3 голосов
/ 19 марта 2010

Нашли.

нужно добавить <httpRuntime requestValidationMode="2.0"/>

в web.config

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