Я получаю его нормально работать в 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