Rails 4:使用内置HTML清理时禁用自动CSS清理
我正在构建一个具有HTML GUI界面的应用程序,用于在容器div
创建,移动和编辑框( div
)。 编辑时,这些框被分配内联样式,这些内联样式将保存到数据库并在视图中输出:
我想清理HTML本身,以避免有人黑客攻击,例如,脚本标记,通过编辑保存框时发送到服务器的内容来发送。
Rails 4有一个通过ActionView :: Helpers :: SanitizeHelper类提供的辅助方法sanitize
。 当我使用包含恶意标记的测试
content
值时,脚本会被删除。 但是,对内容进行清理还会删除样式标记内的框架所必需的 CSS属性,例如top
, left
, position
等。
在链接文档中,声明sanitize
会在遇到样式属性时自动使用函数sanitize_css
:
sanitize_css(风格)
清理一块CSS代码。 当它遇到样式属性时由sanitize使用。
我不希望这种sanitize
行为。 如何使用sanitize_css
禁用清理,以清理HTML,而不是CSS?
您可以允许所需的任何属性和标记,因此rails将跳过它们。
sanitize raw(@slide.content), tags: %w(table tr td ul li), attributes: %w(style href title)
谈到CSS规则本身,允许其他规则有点困难,但仍有可能。 你可以修补HTML::WhiteListSanitizer
类( https://github.com/rails/rails/blob/c71c8a962353642ee44b5cc6ed68dc18322eea72/actionpack/lib/action_view/vendor/html-scanner/html/sanitizer.rb )。 有几个属性可以提供帮助。
- ror – 在has_many和belongs_to的两端包含外键?
- Rails 3使用has_many belongs_to关联构建一个select标记
- 在capybara-webkitfunction规范期间,ActionCable无法连接
- 处理零对象和属性的最佳实践是什么?
- 在为Ruby on Rails应用程序设置mysql数据库时出现“无法通过socket连接到本地MySQL服务器’/var/run/mysqld/mysqld.sock’”错误
- 在轨道上测试ruby路线的位置
- 获取Nokogiri中属性的值以提取链接URL
- 如何在Rails中获取mb中ruby对象的大小?
- 如何使用http.get保留案例?