Защита содержания общественности / в приложении для направляющих

Я поддерживаю приложение для направляющих, которое имеет содержание в общественности / папка, которая должна будет теперь быть защищена входом в систему. Мы полагаем, что перемещение тех папок файлов в путь за пределами общественности / и запись контроллера направляющих подает содержание.

Прежде чем мы начнем писать это, мне было любопытно, если кто-либо еще имеет, столкнулся с этим видом проблемы? Я искал некоторые драгоценные камни / плагины, которые могли бы уже сделать это, но ничего не нашли. Кто-либо создал драгоценный камень для этого?

17
задан Alex Reisner 26 January 2010 в 23:23
поделиться

4 ответа

Вы можете использовать Amazon S3. Вы можете использовать контроллеры для генерации и обслуживания URL-адресов за безопасной областью, и она также имеет функцию, которая в основном предоставляет ресурсы, доступные только в течение определенного времени, когда URL-адрес генерируются.

Проверьте этот URL: http://docs.amazonwebservices.com/amazons3/2006-03-01/index.html?restauthentication.html

2
ответ дан 30 November 2019 в 13:53
поделиться

Я сделал это на сайте, где люди платят, чтобы загрузить определенные файлы, и файлы хранятся в Rails_root / Private . Первое, что нужно знать, так это то, что вы хотите, чтобы веб-сервер обрабатывал отправку файла, в противном случае ваше приложение будет задержено передавать большие файлы, и это быстро принесет ваш сайт в HALT, если у вас есть какой-либо тип загрузки. Таким образом, если вам нужно проверить авторизацию в контроллере, вам также нужен способ передачи управления загрузкой обратно на веб-сервер. Лучший способ сделать это (что я знаю) - заголовок X-SendFile, который поддерживается Nginx, Apache (с модулем) и другими. С помощью C-SendFile Confived, когда ваш веб-сервер получает заголовок X-SendFile в заголовке из вашего приложения, он берет на себя отправку файла к клиенту.

Как только у вас будет X-SendFile, работающий на веб-сервере, метод частного контроллера, как это полезно:

##
# Send a protected file using the web server (via the x-sendfile header).
# Takes the absolute file system path to the file and, optionally, a MIME type.
#
def send_file(filepath, options = {})
  options[:content_type] ||= "application/force-download"
  response.headers['Content-Type'] = options[:content_type]
  response.headers['Content-Disposition'] = "attachment; filename=\"#{File.basename(filepath)}\""
  response.headers['X-Sendfile'] = filepath
  response.headers['Content-length'] = File.size(filepath)
  render :nothing => true
end

, то действие вашего контроллера может выглядеть что-то подобное:

##
# Private file download: check permission first.
#
def download
  product = Product.find_by_filename!(params[:filename])
  if current_user.has_bought?(product) or current_user.is_superuser?
    if File.exist?(path = product.filepath)
      send_file path, :content_type => "application/pdf"
    else
      not_found
    end
  else
    not_authorized
  end
end

, очевидно, ваш метод авторизации будет варьироваться Необходимо менять заголовки, если вы предлагаете файлы, отличные от PDF, или вы хотите, чтобы файл был просмотрен в браузере (избавиться от приложения / Force-Download Тип содержимого).

16
ответ дан 30 November 2019 в 13:53
поделиться

Если вы хотите завязать доставку контента со своими рельсами аутентификации и системой авторизации, вам по существу вам придется поставить контент за контроллером.

Если вы смотрите на более простой вход в систему, вы можете обрабатывать его с HTTP Auth и Settings в вашей среде хостинга (например, используя HTACCESS).

0
ответ дан 30 November 2019 в 13:53
поделиться

AFAIK, X-SendFile не поддерживается nginx. У Nginx есть собственное расширение, позволяющее это сделать, под названием X-Accel-Redirect.

Более подробную информацию об этом вы найдете здесь: https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/

На github также есть плагин rails, реализующий эту функцию: goncalossilva / X-Accel- Перенаправление

1
ответ дан 30 November 2019 в 13:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: