XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости компьютерной системы, используется при хакерской атаке. XSS-атака обычно проводится путём конструирования специального URL, который атакующий предъявляет своей жертве.
К сожаление Rails автоматически не избавляет наши приложения от данного вида атак. Конечно же, мы можем напичкать наши шаблоны вызовами метода h() – но это не правильный подход.
Примеры XSS атак:
'';!--"<XSS>=&{()}
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
<SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>
<SCRIPT/SRC="http://ha.ckers.org/xss.js"></SCRIPT>
Работает в следующих браузерах: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]
Примеры кода приведены исключительно для создания фильтров
Если фильтровать данные перед сохранением – это удобно и избавляет нас необходимости заботиться о данных в шаблоне. Можно реализовать Observe для фильтрации всех полей модели.
Однако если не сработает фильтр, данные попадут в шаблон – а значит вы, атакованы. Например, поиск который отображает вместе с результатами искомое значение. А также другие ситуации.
Поэтому было бы не лишним автоматическая фильтрация в наших шаблонах.
xss_terminate плагин который позволяет легко фильтровать данные. Установили и забыли. Вы можете забыть про метод h(), так как он вам больше не пригодится. Плагин основан на плагине acts_as_sanitized Alex Payne, но обновлен для рельсов 2.0 c дополнительными возможностями.
Дополнительные возможности:
1. Он работает с Rails 2,0.
2. Все работает автоматически. Он подмешивается в ActiveReord::Base и поэтому он работает во всех ваших моделях.
3. Вы можете определить в модели как обрабатывать ваши поля (удалять html или преобразовывать html в эквиваленты)
4. Поддерживает HTML5lib если Rails парсер не делает этого для вас.
Как его использовать.
script/plugin install http://xssterminate.googlecode.com/svn/trunk/xss_terminate
class Article < ActiveRecord::Base
end
class Article < ActiveRecord::Base
xss_terminate :sanitize => [:body]
end
class Article < ActiveRecord::Base
xss_terminate :except => [:title, :body]
end
class Article
xss_terminate :except => [:author_name], :sanitize => [:title]
end
Erubis позволяет автоматически обрабатывать ваши шаблоны, удаляя все возможные XSS атаки. Вы можете использовать его в сочетании с xss_terminate или других плагинов. Используя его как дополнительный слой защиты.
Пример установки можно посмотреть тут http://www.kuwata-lab.com/erubis/users-guide.05.html#topics-rails
Ниже приведены, несколько других проектов по борьбе с XSS атаками:
SafeERB - Безопасный ERB
xss-shield – Автоматически обрабатывает методом h() строки не помеченные как безопасные.
sanitize_params – Удаляет html из параметров перед передачей их вашей модели.
Спасибо заболел статью. Как раз думал о том как автоматически обезопасить свои приложения.
— 21.06.2008 в 16:52
Неплохой материал. Жду новых публикаций.
— 28.10.2008 в 04:31
Ну, как сказать, понравилось :) Хотя я все равно ничего не понял. :)
— 01.01.2009 в 09:57
Интересная статья. Кое-что новое узнал для себя. Автору респект и уважуха :)
— 03.01.2009 в 01:41