質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

4483閲覧

ファイルアップロード 確認画面を経由して戻る Paperclip利用

beginer

総合スコア21

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/09/22 06:34

登録画面→確認画面→登録画面(何かしらの誤りの修正のため。また、登録画面からはファイルアップロードが可能)
と、画面遷移をした際に、登録画面で選択したアップロードファイルを再度登録画面に戻った際にファイル選択された状態にしておきたいと考えています。

以下にイメージのソースを記載させていただきます。

■tests/new.html.erb
<%= form_for @test, url:{action: 'confirm'} do |f| %>
<%= f.file_field :upload %>
<%= f.submit %>
<% end %>

■tests_controller.rb

def confirm
@test = Test.new(test_params)
cookies[:upload] = params[:test][:upload]
p cookies[:upload] ##1
format.html { render action: 'confirm_check' }
end

■tests/confirm_check.html.erb
<%= form_for @test do |f| %>
<label>ファイル名:
<%= @f.test_file_name %>
</label>
<%= f.submit '保存', :name => 'regist'%>
<%= f.submit '修正', :name => 'back'%>

■tests_controller.rb
def create
@test = Test.new()
p cookies[:upload] ##2
@test.upload = cookies[:upload] #=>エラーになる
if params[:regist]
@test.save
render 'index'
else
render 'new'
end
end

上記プログラムにおいて、
p cookies[:upload]をすると
##1の場合:#<ActionDispatch::Http::UploadedFile:0x007fad0106bb10 @tempfile=#<Tempfile:/var/folders/7l/mbl83q6j6mbdvh 。。。。。略">
##2の場合:"#ActionDispatch::Http::UploadedFile:0x007fad0106bb10"
となってしまいます。
そのため、後続の
@test.upload = cookies[:upload]で
Paperclip::AdapterRegistry::NoHandlerErrorのエラーになってしまいます。

グーグル検索すると、画面遷移間でファイル情報を持つとセキュリティー的に良くないというような内容を目にしましたが、上記内容がそのために発生していることなのでしょうか。それとも、そもそもやり方が良くないのでしょうか。

どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

登録画面で選択したアップロードファイルを再度登録画面に戻った際にファイル選択された状態に

セキュリティ上好ましくない動きなので、ブラウザはそれを可能にする機能を提供していません。
平たく言えば、「できません」。

もし、なんらかのトリッキーな手法でできる方法があったとしても、「脆弱性」に該当するのですぐに不具合として修正されることになります。

投稿2015/09/22 06:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginer

2015/09/22 07:38

Kosuke_Shibuyaさん ありがとうございます!やはりそういうものなのですね。 いまいち、脆弱性の部分がリアルにピンッときませんが、もう少し調べてみます。
退会済みユーザー

退会済みユーザー

2015/09/22 08:35

> 脆弱性の部分がリアルにピンッときません 要するにプログラムの作成者が、クライアントマシンに存在するファイルを任意に送信させてしまうことが可能になってしまいます。MyDocumentsの中身とかなんでも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問