题 在Rails中清理CSS


我想允许我正在构建的Web应用程序的用户编写自己的CSS以自定义他们的个人资料页面。

但是我知道这个开放存在很多安全风险,我的背景是:url('javascript:alert(“得到你的cookie!”+ document.cookies')。

因此,我正在寻找一种清理CSS的解决方案,同时仍然为我的用户提供尽可能多的CSS功能。

所以我的问题,如果有人知道一个宝石或插件来处理这个?我已经搜索过我的大脑,所以任何提示都会非常感激!


13
2018-06-16 07:09


起源


只是好奇,你如何存储你的CSS?在数据库中或作为每个用户的文件? - Shripad Krishna
哇..疯了,你可以像这样从CSS执行javascript。不知道如何解决它 - 抱歉! - zaius
Shripad K:我会将CSS存储在数据库中。 zaius:是的!看看这个页面: guides.rubyonrails.org/security.html#css-injection - Erik


答案:


Rails有一个内置的css消毒剂

看到 http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize_css 和它的父母 http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize

> ActionController::Base.helpers.sanitize_css('background:#fff')
=> "background: #fff;" 
> ActionController::Base.helpers.sanitize_css('javascript:alert("garr");')
=> "" 

7
2018-06-16 08:28



好的谢谢!但据我了解,此方法仅用于清理HTML元素上的样式属性。它不能用于消毒整个样式表......? - Erik
它应该是相同的 - 一条线或一堆线......这没关系。 - mylescarrick
它不处理整个样式表。 - Habax
full_stylesheet.gsub(/\{([^}]*)\}/m){ '{' + ActionController::Base.helpers.sanitize_css($1) + '}'; } 可能就够了。 - Habax


还有一些名为css_file_sanitize的代码: https://github.com/courtenay/css_file_sanitize

将它与Rails进行比较 sanitize 命令我发现两者都使用正则表达式来去除CSS的不需要的部分。

这是css_file_sanitize的源代码: https://github.com/courtenay/css_file_sanitize/blob/master/lib/css_sanitize.rb

这是Rails的源代码 sanitizehttps://github.com/rails/rails/blob/master/actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb


1
2017-09-08 21:44