2012-01-05 1 views
3

В настоящее время при попытке отправить транзакцию, содержащую выпадающий список, который имеет угловую скобку с текстом, например. "<abcd>", я получаю 500 внутренних ошибок сервера с ValidateRequest=true по умолчанию и выбрасывает необработанное исключение, прежде чем оно достигло обработчика страницы, так как проблема с межсайтовым скриптингом.Ручка углового кронштейна в ASP.Net

Есть ли способ перехватить и изменить объект запроса в HttpModule или Glabal.asax, так как я знаю, что объект запроса только для чтения.

Я ломаю голову почти три дня, но не могу получить конкретное решение. Что было бы лучшим решением для обработки подобных сценариев. Также я не хочу кодировать его на стороне клиента.

+0

как вы заполняете список? –

+0

Его выпадающий список, а не список. Я привязываю выпадающее меню к datatable. DataTablew содержит данные, текст которых может иметь значения . – Syed

+0

показать нам определение источника данных и раскрывающегося списка ... стандартная привязка данных ** делает ** html encoding –

ответ

0

Я предпочитаю использовать Microsoft Anti-Cross Site Scripting Library V4.0 как он предоставляет множество вспомогательных функций для кодирования HTML, HtmlAttribute, JavaScript, URL, XML, чтобы ограничить любые перекрестные атаки сайта.

3

Encode значение в ListBox:

<asp:ListItem>&lt;abcd&gt;</asp:ListItem> 

[Редактировать] Я понимаю, что мое решение не применяется. Контент, вероятно, отправляется в кодировке браузера и также отображается в выпадающем списке (если вы используете стандартную привязку данных). Я думаю, что ваш единственный вариант - отключить проверку запроса.

Это означает, что вы должны очень внимательно относиться к пользовательскому вводу. Чтобы быть простым, кодируйте каждый пользовательский ввод с помощью HttpUtility.HtmlEncode(txtXX.Text);.

Подробнее об этом на странице страницы MSDN.

+0

Но это будет выглядеть очень грязно для конечного пользователя, имеющего эти символы (например, <10 или >), видимые в пользовательском интерфейсе. Я бы хотел обработать «» на обратной передаче, нажав кнопку отправки. – Syed

+1

будет расшифрован браузером. Это стандартный способ представления символов, используемых синтаксисом html: http://www.w3.org/TR/html4/charset.html#h-5.3.2 –

+0

Я не хочу устанавливать ValidateRequest в false вместо того, чтобы искать в котором я могу обрабатывать запрос и изменять. Наверное, я не попаду на правильный путь.Я попытался с HttpModule, но мне не удалось изменить объект запроса. – Syed

1

Использование HttpUtility.HtmlEncode и HttpUtility.HtmlDecode решить эту проблему ..

вы можете поместить HTML закодированный текст в элементе управления или использовать эти методы в соответствии с вашими требованиями (между событиями)

Следуйте этим SO нить ...
HttpUtility.HtmlEncode to validate user entries
w3c validation error in asp.net

Если вы можете отключить проверку затем следовать этим
asp.net: Invalid postback or callback argument

Проверить MSDN для Script Exploits