Шифрование / дешифрование с использованием Carrierwave - PullRequest
0 голосов
/ 09 февраля 2012

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

Моей первой мыслью было переписать CarrierWave :: Uploader:: Store :: магазин!и CarrierWave :: Uploader :: Store :: retrieve_from_store!методы, чтобы включить мой код шифрования и расшифровки, но я не совсем уверен, как это сделать?

Я планирую использовать шифрование Blowfish.

Store

def store!(new_file=nil)
  # seems like I should process new_file here
  cache!(new_file) if new_file && ((@cache_id != parent_cache_id) || @cache_id.nil?)
  if @file and @cache_id
    with_callbacks(:store, new_file) do
      new_file = storage.store!(@file)
      @file.delete if (delete_tmp_file_after_storage && ! move_to_store)
      delete_cache_id
      @file = new_file
      @cache_id = nil
    end
  end
end

Получить из магазина

def retrieve_from_store!(identifier)
  with_callbacks(:retrieve_from_store, identifier) do
    res = storage.retrieve!(identifier)
    @file = res #process res before I store it to file?
  end
end

Любые советы будут с благодарностью.

1 Ответ

0 голосов
/ 10 марта 2012

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

  def store_dir
    "/path_to_rails_app/uploads/#{model.user_id}/#{model.id}"
  end

Отсюда вы можете использовать метод download и инструмент авторизации, чтобы узнать, есть ли у пользователя доступ к загрузке. Есть идеи об уязвимостях? Кроме массового назначения или физического доступа к машине, я не думаю, что это будет иметь большое значение. Вы также захотите установить cache_dir на что-то вне публики.

  def cache_dir
    "/path_to_rails_app/tmp/uploads/cache/#{model.user_id}/#{model.id}"
  end
...