eng рус  
small_logo

Разработка приложений с помощью Ruby on Rails™


Rails и XSS

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


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

Удаление HTML тегов для всех полей в модели

class Article < ActiveRecord::Base
end

Фильтрация HTML для некоторых полей

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


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 из параметров перед передачей их вашей модели.

4 комментариев к “Rails и XSS”

Оставьте свой комментарий

(не будет опубликовано)

О нас Проекты Блог Контакты
© 2008, команда hashtrain.com