pme*_*ino 6 ruby safari google-chrome sinatra sendfile
我正在使用send_fileSinatra应用程序:
get '/update/dl/:upd' do
filename ="/uploads/#{params[:upd]}"
send_file(filename, :filename => "t.cer", :type => "application/octet-stream")
end
Run Code Online (Sandbox Code Playgroud)
/uploads/它不是公开的文件夹,它在app dir上.当我尝试使用localhost:4567/update/dl/some_fileChrome时,它返回404,就像使用Firefox一样,当看到标题时,它是404.但是如果我尝试使用Safari,它会下载文件.所以我觉得我的代码(和Safari的代码有问题,但让我们把它留给Apple:P).可能有什么不对?谢谢!
如果我删除文件名中的初始斜杠,那么它就可以在 Chrome 中正常工作,这样它就是“文件名而不是”/文件名。404 来自 send_file 中的文件未找到错误
# foo.rb
require 'sinatra'
get '/update/dl/:upd' do
filename ="uploads/#{params[:upd]}"
# just send the file if it's an accepted file
if filename =~ /^[a-zA-Z0-9]*.cer$/
send_file(filename, :filename => "t.cer", :type => "application/octet-stream")
end
end
Run Code Online (Sandbox Code Playgroud)
然而,这确实存在一个很大的安全漏洞,用户可以下载 sinatra 进程有权访问的任何内容,我将我的 sinatra 应用程序命名为 foo.rb,并且此请求下载 sinatra 脚本:
http://localhost:4567/update/dl/..%2Ffoo.rb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |