Rails - защита от впрыска кода и XSS


20

Я начал использовать Ruby on Rails, и мне было интересно, есть ли какие-либо защитные исправления, которые нужно отслеживать с помощью Rails, особенно в отношении ввода кода и XSS?

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

11

Rails 3 имеет некоторые довольно хорошие защиты, включенные по умолчанию, которые поймут множество общих проблем безопасности.

В частности, выходное кодирование поможет уменьшить атаки XSS, токены CSRF включены по умолчанию во всех формах, которые должны здесь помочь, и до тех пор, пока вы его правильно используете, ActiveRecord или другие ORM могут помочь с смягчением SQL-инъекции.

На передней стороне проверки ввода есть, очевидно, некоторые вещи, на которые нужно обратить внимание. Rails не будет выполнять проверку ввода для вас по умолчанию, поэтому, если данные, введенные в ваше приложение, будут переданы другим веб-приложениям, все еще существует риск возникновения атак XSS.

Это говорит о том, что Rails поддерживает валидации в модели, и я порекомендовал бы, если это возможно, подтверждение ввода в белый список.

На фронте SQL-инъекции все еще можно использовать необработанный SQL с ActiveRecord, и если вы это сделаете, тогда могут возникнуть обычные проблемы с SQL-инъекцией, поэтому снова будет проверена проверка ввода всех белых значений.

Помимо этого есть еще несколько вещей, на которые стоит обратить внимание. базовая установка Rails не предоставляет авторизацию/аутентификацию, так что либо она должна поступать из плагина, либо быть написана разработчиком.

Единственный недостаток URL-адреса стиля RESTful, который обычно создает приложение rails, заключается в том, что злоумышленник обычно пытается нарушить авторизацию путем изменения URL-адреса. Например, URL-адрес http://mysite/users/1, который показывает первого пользователя, может быть легко изменен, чтобы иметь 2 или более. Дело не в том, что оно менее безопасно, но это облегчает для злоумышленников попытку обойти контроль авторизации.

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

The OWASP rails security guide is here и есть также книга Security on Rails от Pragmatic Programmers, которая, хотя она сосредоточена на Rails 2.3, по-прежнему имеет много хорошей информации (обратите внимание, что Security on Rails теперь не печатается).


10

OWASP XSS Cheat Sheet является большим ресурсом, чтобы понять все пути XSS может произойти:

  • ПРАВИЛО # 0 - не вставляйте Подозрительные данных, за исключением разрешенных местоположений
  • ПРАВИЛО # 1 - HTML Побег Перед Вставка Ненадежных данных в HTML элемент контента
  • ПРАВИЛО # 2 - Атрибут Побег Перед Вставка Ненадежных данных в HTML Общие атрибуты
  • Правило № 3 - JavaScript Побег Перед Вставка Ненадежных данных в HTML JavaScript данных Значения
  • Правило № 4 - CSS побег Перед Вставка Ненадежных данных в HTML Style Значения свойств
  • Правило № 5 - URL побег Перед Вставка Ненадежных данных в HTML URL Значения параметров
  • Правило № 6 - Используйте двигатель HTML политики для проверки или чистый управляемые пользователем HTML в исходящем пути
  • Правило № 7 - Предотвращение DOM на основе XSS

Не все правила выше, позаботятся Rails автоматически и зависит от версии:

Rails 3.x = "Если простая строка передается в <% =%>, то Rails всегда ее избегает"
Rails 2.x = Вам нужно использовать метод h() (или использовать что-то вроде Cross Site Sniper или Safe Erb)

Белые листинга управляют днем: если вы ожидаете двухбуквенную аббревиатуру США, то используйте валидации, чтобы принять только это.

Руководство по общей безопасности: http://guides.rubyonrails.org/security.html