gpt4 book ai didi

Ruby/Sinatra send_file 不工作

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:35 24 4
gpt4 key购买 nike

我在 Sinatra 应用程序上使用 send_file:

get '/update/dl/:upd' do

filename ="/uploads/#{params[:upd]}"
send_file(filename, :filename => "t.cer", :type => "application/octet-stream")
end

/uploads/ 文件夹不是公开的,它在应用程序目录中。当我尝试在 Chrome 中访问 localhost:4567/update/dl/some_file 时,它会返回 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

但是,这确实存在一个很大的安全漏洞,用户也可以下载 sinatra 进程有权访问的任何内容,我将我的 sinatra 应用程序命名为 foo.rb 并且此请求下载了 sinatra 脚本:

 http://localhost:4567/update/dl/..%2Ffoo.rb

关于Ruby/Sinatra send_file 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com