我正在创建另一个 HTML/CSS 小提琴网络应用程序。它基于 Sinatra 并支持带有 Compass 扩展的 SASS。
这是它的工作原理。
1)需要指南针和扩展:
require 'compass'
require 'singularitygs'
require 'breakpoint-slicer'
2) 将 Compass 加载路径添加到 Sass 类中:
Compass.sass_engine_options[:load_paths].each do |path|
Sass.load_paths << path
end
此代码是从SassMeister借来的。
3) 使用 SASS 接收 AJAX 请求,编译并返回 CSS:
post '/compile-sass' do
sass = params[:sass]
begin
sass(sass.chomp, {:style => :nested, :quiet => true})
rescue Sass::SyntaxError => e
status 200
e.to_s
end if sass
end
有点非常简单的功能。用户必须在手动提供@import
任何支持的 Compass 扩展时提供 SASS 代码:
@import breakpoint-slicer
html
+from(3)
background-color: pink
问题:
让用户导入任何东西是否安全?当导入 SASS 加载路径之外的扩展时,SASS 不会编译并引发错误。但是 SassMeister 的作者 JedFoster认为这种行为是一个性能和安全漏洞,并让 SassMeister 注释掉手动导入。为什么?
在给定的代码中有什么可以改进的吗?