0

私のキャリアウェーブアップローダは、ファイルを保存する際にファイルを暗号化し、取得時に復号化するようにしたいと考えています。Carrierwaveを使用した暗号化/復号化

私の最初の考えは、CarrierWave :: Uploader :: Store :: storeを書き直すことでした。とCarrierWave :: Uploader :: Store :: retrieve_from_store!私の暗号化と復号化コードを含める方法はありますが、これをどうやって行うのかはよく分かりません。

私はBlowfish暗号化を使用する予定です。

ストア

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 

から取得する任意のヒントをいただければ幸いです。

答えて

0

ファイルが実際にパブリックディレクトリに格納されていない場所で、いつでもこのようなことを行うことができます。これは、ファイル名を推測するウェブクローラまたは誰かを防止するであろうし、ここからあなたのファイル

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

をダウンロードするから、ユーザーがダウンロードへのアクセス権を持っているかどうかを確認するためにdownload方法と承認ツールを使用することができます。これに関するvunerabilitiesの任意のアイデア?マス・アサインメントやマシンへの物理的なアクセス以外は大きな問題ではないと思います。また、cache_dirを一般公開されていないものに設定することもできます。

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

私は、S3やラックスペースのようなものにFogを使ってファイルを保存したいと思いますが、そのアイデアは気に入っています。 – Cyrus

+0

Carrierwave Encrypter Decrypter gemの使用はいかがですか? – Matthias

+0

@Matthiasその宝石はうまくいくかもしれませんが、コミットせずに2年近く経っても維持されているようには見えません。 – kobaltz