我正在创建另一个HTML / CSS小提琴网络应用程序。它基于Sinatra,支持SASS和Compass扩展。
这是它的工作原理。
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
有点非常简单的功能。用户必须手动提供SASS代码@import
任何支持的Compass扩展:
@import breakpoint-slicer
html
+from(3)
background-color: pink
问题:
允许用户导入任何内容是否安全?当导入SASS加载路径之外的扩展时,SASS将不会编译并抛出错误。但是,SassMeister的作者JedFoster considers这样的行为是一个性能和安全漏洞,并使SassMeister评论出手动导入。为什么呢?
在给定的代码中有什么可以改进的吗?