【发布时间】:2015-04-05 23:27:28
【问题描述】:
使用我的 Rails 表单进行实验,我发现将 <scrip>alert("hello")</script> 插入 text_field 会给我两个不同的结果。
当我使用该值时,例如在显示页面中,它会自动转义。
当我在新表单中使用该值时,例如允许用户编辑时,它不会被转义,并且会弹出警报。
经过大量研究,我发现 text_area 有一个转义布尔值可以防止这种情况发生,但 text_field 没有。谷歌上出现的大部分内容都是关于在 erb 模板中转义,这在使用表单时似乎不起作用。有一些提示表明应该对进入数据库的数据进行清理,但是关于执行此操作的最佳方法的指导很少——除了使用旧的解决方案,例如 xssterminate,它似乎可以追溯到 Rails 2。即使是 RoR 安全指南侧重于清理 erb 输出而不是清理输入。
两个问题。
- 在保存 text_field 输入之前,当前的最佳实践方法是什么? (例如:在表单、控制器或模型中。哪些 gem 仍然被认为是当前的?)
- 不管怎样,因为我是偏执狂,你如何在显示 db 数据时对 text_field 进行清理?
【问题讨论】:
标签: ruby-on-rails security xss