2012-07-03 4 views
5

Я только что начал использовать драгоценный камень brakeman, чтобы изучить мое приложение rails для уязвимостей безопасности.Как защитить уязвимые места для скриптинга link_to @variable

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

Они все разделяют следующие общие черты:

  • Они все теги link_to
  • Все они имеют переменные экземпляра в классе, альт или название атрибуты
  • Переменные экземпляра все представляют собой активный запрос записи, который содержит связанные модели
  • Все переменные экземпляра являются «комментариями». Это описывает полиморфную ассоциацию для генерируемых пользователем комментариев, аналогичную подходу к пересмотренной версии this Railscast.

например

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %> 

где

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id]) 

Это то, что я должен быть обеспокоен/принять меры для? Я думал, что Rails 3.2 побеждает по умолчанию.

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

ответ

4

Мне не удалось воспроизвести какие-либо предупреждения из предоставленного вами кода. Какую версию Brakeman вы используете? Каково было фактическое предупреждение (отредактировано по мере необходимости)?

I подозреваемый вы получаете предупреждения, поскольку пользовательский ввод обнаруживается в значении href ссылки. См. this pull request для получения дополнительной информации о том, почему это может быть опасно.

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

Edit:

Хорошо, теперь я вижу предупреждение при тестировании с @model = @commentable = ... Это проблема с тем, как кондуктор обрабатывает задание.

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

Да, Rails избежит HTML, но не имеет ссылок на ссылки, начинающиеся с javascript: или data:, которые can be used for XSS.

+0

спасибо за ваш ответ Джастин. Посмотрев снова на ошибку, я также заметил, что все они являются сложными операторами 'include' (т. Е. Несколько моделей, некоторые из которых вложены). Также (и, возможно, это причина), все они «замечательны». Я уточню свой вопрос более подробно. –

+0

Возможно, рефакторинг моего '@model = @commentable = ARquery' в две строки может решить эту проблему? Но я все еще не уверен, что понимаю, почему это проблема. Не будет ли Rails этого по умолчанию?Цените любые советы, которые помогут мне улучшить мое понимание. –

+0

Обновленный ответ в свете этой новой информации. Похоже, что разделение на две строки разрешает проблему, что является ошибкой в ​​Brakeman. – Justin