Как обрабатывать XSS на NVelocity

Castle Project полон функций, включает в себя несколько потрясающих подпроектов, и разрабатывать с ним было одно удовольствие.

Моя команда почти готова предоставить индивидуальный EAM, и мы дорабатываем нашу систему. Мы попробовали несколько базовых XSS-атак и угадали: все они сработали.

Несмотря на то, что он будет работать в среде интрасети, мы не хотим, чтобы пользователи случайно сломали всю систему, и мы изучаем решения для решения проблем XSS.

NVelocity по умолчанию ничего не ускользает, поэтому этот код:

${entity.Field}

с полем, содержащим такие вещи, как:

<script>alert('xss!')</script>

даст нам хорошее оповещение xss.

Библиотека Microsoft AntiXSS выглядит неплохо: обрабатывает несколько типов возможных векторов XSS и так далее. Мы столкнулись с помощником AndyPike, но это решение заставит нас рефакторировать пару тысяч строк. Ага, нехорошо. И это не повлияет на автоматическое связывание ActiveRecord / NVelocity при редактировании существующих объектов.

Возникает вопрос: можно ли / рекомендуется использовать методы кодирования вывода для исправления движка NVelocity Castle Project? Так же, как они сделали с Брайлом? У кого-нибудь есть идея получше?

Спасибо!

PS: Stackoverflowers, использующие Castle Project, будут использовать такой патч?


person wtaniguchi    schedule 11.09.2009    source источник
comment
Небольшое примечание: FormHelper выполняет HtmlEncondig перед вводом значений в поля ввода.   -  person wtaniguchi    schedule 14.09.2009


Ответы (2)


NVelocity по умолчанию ничего не ускользает

О, Боже. Значит, вам нужно внести много исправлений в код.

Отсутствие экранирования текста, помещаемого в HTML, не является ошибкой, которую вы можете исправить постфактум. Да, есть библиотеки, которые отфильтровывают очевидный неверный ввод, но они только скрывают проблему, и не очень хорошо. Учитывая широкий спектр странных конструкций, которые принимают браузеры, всегда найдутся способы скрыть через них плохой HTML, и в то же время они будут давать вам ложные срабатывания - например, этот пост будет заблокирован за обсуждение тега <script>.

В лучшем случае это временный пластырь, пока вы не решите настоящую проблему.

person bobince    schedule 11.09.2009
comment
Что вы имеете в виду, например, что ваш пост будет заблокирован? Экранирование значений при вставке в HTML даст вам примерно то же самое, что и здесь, в SO. Не так ли? - person wtaniguchi; 12.09.2009
comment
да. Если вы экранируете текст при добавлении его в HTML, значит, вы все делаете правильно. Я имею в виду, что если бы SO делали это неправильно (как, по-видимому, NVelocity), а затем пытались бы скрыть это, используя один из входных фильтров `` анти-XSS '', у него были бы отрицательные побочные эффекты, такие как блокировка или искажение действительный ввод пользователя, как мы говорим о <script>. Как и не совсем водонепроницаемость. - person bobince; 12.09.2009
comment
NVelocity ничего не ускользает при получении входного значения или добавлении его в HTML. Я пытаюсь заставить NVelocity отображать экранированные значения по умолчанию, но это будет долгая поездка ... - person wtaniguchi; 14.09.2009
comment
Верно. Исправление старого приложения без экранирования вывода - долгая и утомительная задача, но единственный способ, который в конечном итоге сработает должным образом. (Ничего не должно быть экранировано при получении входных значений.) - person bobince; 14.09.2009

NVelocity может автоматически экранировать вывод без изменения ваших шаблонов, и вам не нужно менять код NVelocity.

См. Автоматическое кодирование HTML вывода NVelocity (EventCartridge и ReferenceInsert)

person Mauricio Scheffer    schedule 22.02.2011