Экспериментируя с моей формой Rails, я считаю, что вставка <scrip>alert("hello")</script>
в текстовое поле дает мне два разных результата.Rails form text_field escaping html
Когда я использую это значение, например, на странице дисплея, оно автоматически исчезает.
Когда я использую значение в новой форме, например, чтобы разрешить редактирование пользователя, оно не экранировано, и я получаю всплывающее предупреждение.
После много исследований я обнаружил, что text_area имеет escape-логическое значение, которое предотвращает это, но не текстовое поле. Большая часть материала, появляющегося в google, - это экранирование в шаблонах erb, которое, похоже, не работает при использовании формы. Есть несколько советов о том, что данные должны быть дезинфицированы в дБ, но мало указаний на лучший способ сделать это - помимо использования старых решений, например xssterminate, которые, как представляется, относятся к Rails 2. Даже безопасность RoR руководство фокусируется на дезинфекции эр-выхода, а не на санкционировании ввода.
Два вопроса.
- Каков текущий передовой подход к дезинфекции ввода text_field до его сохранения? (например: в форме, контроллере или модели. Какие драгоценные камни все еще считаются текущими?)
- Независимо от того, что я параноик, как вы дезинфицируете текстовое поле при отображении данных db?
Я отправился с настраиваемым методом, который отклоняет ввод пользователя, если он содержит какие-либо из <, >,?, ", 'Или/и добавляет сообщение об ошибках [: base]. Я использовал ваш ответ как полезный, но я думаю, что вопрос все еще открыт :-) –