2015-04-05 2 views
0

Экспериментируя с моей формой Rails, я считаю, что вставка <scrip>alert("hello")</script> в текстовое поле дает мне два разных результата.Rails form text_field escaping html

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

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

После много исследований я обнаружил, что text_area имеет escape-логическое значение, которое предотвращает это, но не текстовое поле. Большая часть материала, появляющегося в google, - это экранирование в шаблонах erb, которое, похоже, не работает при использовании формы. Есть несколько советов о том, что данные должны быть дезинфицированы в дБ, но мало указаний на лучший способ сделать это - помимо использования старых решений, например xssterminate, которые, как представляется, относятся к Rails 2. Даже безопасность RoR руководство фокусируется на дезинфекции эр-выхода, а не на санкционировании ввода.

Два вопроса.

  1. Каков текущий передовой подход к дезинфекции ввода text_field до его сохранения? (например: в форме, контроллере или модели. Какие драгоценные камни все еще считаются текущими?)
  2. Независимо от того, что я параноик, как вы дезинфицируете текстовое поле при отображении данных db?

ответ

1

Жемчужина loofah-activerecord (https://github.com/flavorjones/loofah-activerecord) выглядит как лучший вариант для дезинфекции данных на своем пути в базу данных. Использование xss_foliate для ваших моделей по умолчанию будет разделять теги для всех столбцов.

например.

class User < ActiveRecord::Base 
    xss_foliate 

    ... 
end 

Я не нашел решение 2-й точки, но было бы очень хотелось знать об этом, если есть один!

+0

Я отправился с настраиваемым методом, который отклоняет ввод пользователя, если он содержит какие-либо из <, >,?, ", 'Или/и добавляет сообщение об ошибках [: base]. Я использовал ваш ответ как полезный, но я думаю, что вопрос все еще открыт :-) –

Смежные вопросы