2009-09-11 1 views
2

Замок Проект полон особенностей, включает в себя некоторые удивительные подпроекты, и разработка с ним была приятной.Как обращаться с XSS на NVelocity

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

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

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

${entity.Field} 

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

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

даст нам хороший предупреждение XSS.

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

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

Спасибо!

PS .: Stackoverflowers с использованием Castle Project будет использовать такой патч?

+0

Только быстрое примечание: FormHelper делает HtmlEncondig до ввода значений в поле ввода. – wtaniguchi

ответ

1

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

О, дорогая. Тогда у вас есть много исправлений для кода.

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

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

+0

Что вы подразумеваете под «например», ваш пост будет заблокирован? Выделение значений при вставке в HTML даст вам почти то же самое, что и вы здесь, в SO. Не так ли? – wtaniguchi

+0

Да. Если вы избегаете текста при добавлении его в HTML, вы делаете это правильно.Я имею в виду, что если бы SO делали это неправильно (например, NVelocity), а затем пытались покрыть это, используя один из входных фильтров «anti-XSS», у него были бы отрицательные побочные эффекты, такие как блокировка или искажение действительный пользовательский ввод, как мы говорим о '