validateRequest="false" ведет себя странно
(ASP.NET 4.0 C#)
У меня есть мой <httpRuntime requestValidationMode="2.0" />
в вебконфиге. И у меня есть validateRequest="false"
в каталогах страниц.
На одной странице я отправляю некоторые данные (html) из ckeditor (textarea) в базу данных. Работает отлично. На другой странице я заполняю ckeditor данными из базы данных, затем обновляю их (отправляю обратно) и получаю известное "потенциально опасное значение Request.Form было обнаружено клиентом".
Меня очень смущает. Единственное отличие состоит в том, что на второй странице данные динамически вставляются в текстовую область, где на первой странице текстовая область пуста при загрузке страницы. Я что-то здесь упускаю? Я уверен, что кодирование / декодирование ничего не значит, так как фреймворк останавливает это, прежде чем я даже могу начать возиться с этим на серверной части.
3 ответа
Хорошо, я не нашел ответа на вопрос, почему он так себя ведет. Но я нашел очень простой и быстрый способ обойти это (+ новые преимущества).
Theres парень, который сделал.NET Ckeditor контроля
http://cksource.com/forums/viewtopic.php?f=11&t=15882
Вот и ты. Работает как шарм. Нет ошибок проверки, что так всегда.
ValidationRequest="false" применяется только к файлам.aspx в предыдущих версиях платформы.
В ASP.NET 4 он включен для всех запросов до фазы BeginRequest любого HTTP-запроса. Таким образом, проверка запросов применяется к запросам всех ресурсов ASP.NET, таких как вызовы веб-служб и настраиваемые обработчики HTTP.
Чтобы обойти этот новый механизм, нужно создать свой собственный RequestValidator и изменить web.config для использования этого пользовательского валидатора.
http://msdn.microsoft.com/en-us/library/system.web.util.requestvalidator.aspx
Попробуйте установить для ValidateRequest значение false в директиве страницы? Лучшим вариантом может быть использование библиотеки Microsoft Anti-Cross Site Scripting Library:
http://msdn.microsoft.com/en-us/library/aa973813.aspx
На аналогичный вопрос ответили здесь:
В чем разница между requestValidationMode 2.0 и 4.0
Также возможно, что ASP.NET 4.0 не установлен или пул приложений не настроен для работы под 4.0.