- PR -

ファイルの作成について

投稿者投稿内容
しろう
会議室デビュー日: 2003/04/18
投稿数: 7
投稿日時: 2003-04-19 02:15
引用:

うん、もちろんそれ(ユニークなディレクトリやファイル名(Session ID あたりを使えばいいのでしょう)、ファイルの生存期間)も重要なんですが、それ以前の話であったのであえてそこまで言及していません。まずファイルをローカルディレクトリに置けるかどうかが問題だと思います。Secure な話はその後です。



ブラウザの特定バージョンに拘るのがセキュリティの話より重要だという事ですか?

引用:

もう私が書いたようにそれはブラウザによって挙動が違うからです。Internet Explorer が一般的だと思うのですが、ファイル名をブラウザに伝える部分でブラウザによっては上手く動かない可能性があるからです(たぶんファイル名が伝わらない)。ですから リダイレクトしてもらう or リンクを辿ってもらうという方式が確実ではありますね。イントラネットなどでブラウザを統一できる場合はこの限りではありません。



インターネットならそもそもリダイレクトの方法ではセキュリティ上無理があると思います。

ファイル名が上手く伝わらないのはIE5.5sp1のattachmentの件以外、どんな問題がありますか?
(それはプログラムで回避出来る内容ですが)
インターネットならリダイレクトはセキュリティ上問題あるし、イントラならブラウザのバージョンをIE5.5sp1以外(イントラならもはやパッチの関係上IE6以上にした方がいいと思いますが)にすれば済むのでは?
インターネットに出すとして、特定のIEのバージョンのためにセキュリティを削ってまでプログラミングする意図はなんでしょう?
keisuken
会議室デビュー日: 2003/04/18
投稿数: 4
投稿日時: 2003-04-19 21:32
私のハンドル名から具体的に誰だか判るわけですし、いい加減なことは言っていないつもりです(間違いや誤解を生みそうなところは訂正させていただきました)。

しろうさんのおっしゃることはもっともだと思いますし別に否定はしていないんですよ。だからそこだけ突っ込んでみても何も生まれそうにありませんからこの辺で終わりにしましょう。そのかわり簡単にまとめておきました。

引用:

しろうさんの書き込み (2003-04-19 02:15) より:
ブラウザの特定バージョンに拘るのがセキュリティの話より重要だという事ですか?



いいえ、どちらが重要かではなく、この話の趣旨はファイルをどう書き込むか、どう公開するかということですから、私はそこだけ言っただけです。

引用:

しろうさんの書き込み (2003-04-19 02:15) より:
引用:

もう私が書いたようにそれはブラウザによって挙動が違うからです。Internet Explorer が一般的だと思うのですが、ファイル名をブラウザに伝える部分でブラウザによっては上手く動かない可能性があるからです(たぶんファイル名が伝わらない)。ですから リダイレクトしてもらう or リンクを辿ってもらうという方式が確実ではありますね。イントラネットなどでブラウザを統一できる場合はこの限りではありません。


インターネットならそもそもリダイレクトの方法ではセキュリティ上無理があると思います。


はいそう通りですね。リンクを辿る方法でも Referer 攻撃が出来てしまうということですよね。ですからこの件は取下げます。失礼致しました。

ちなみに私も以前作っていた Web アプリケーションでも、別の方法を使っていました(後述)。

引用:

インターネットならリダイレクトはセキュリティ上問題あるし、イントラならブラウザのバージョンをIE5.5sp1以外(イントラならもはやパッチの関係上IE6以上にした方がいいと思いますが)にすれば済むのでは?



仕様に沿わない(つまり IE に限定できない)場合もあるので、最良の方法とは思っていません。それ以外の方法もあると言っておきます。

結局やっていることは同じですが、特定のブラウザに依存したくない場合は、もうちょっと一工夫して、もともとのサーブレットの URI をそのファイル名にしておくという方法もあります。この場合はファイル名を動的に変えることが出来ないという問題がありますが、実はこれも servlet-mapping の設定次第でどうにでもなります。

(手前味噌で申し訳ないのですが)例としてはこんな感じです: 某社のソフトウェアダウンロード

ということでまとめると、

  • ファイルを生成して置いて置く この方法はセキュリティ上お勧めできない(Referer 攻撃などの問題がある(本当は回避策はあるが複雑になるし誤解を生みそうなので今回は差し控えます))
  • ストリームとして返す(後者の方が汎用的でお勧め)

    • HTTP ヘッダ, MIME ヘッダなどにファイル名をつけて、そのままレスポンス(ストリーム)として返す
    • Servlet の URI 名そのものをファイル名にしておきレスポンス(ストリーム)として返す


でしょうか。


[ メッセージ編集済み 編集者: keisuken 編集日時 2003-04-19 21:37 ]

[ メッセージ編集済み 編集者: keisuken 編集日時 2003-04-19 21:47 ]
しろう
会議室デビュー日: 2003/04/18
投稿数: 7
投稿日時: 2003-04-21 02:49
引用:

keisukenさんの書き込み (2003-04-19 21:32) より:
私のハンドル名から具体的に誰だか判るわけですし、いい加減なことは言っていないつもりです(間違いや誤解を生みそうなところは訂正させていただきました)。



これ読んで気付きました……。
私が言っていた事は今更でしたね。すみません……。
そういう事であれば今更keisukenさんにJavaの事で何も言う事は無いのですが、申し訳ありませんがあと2点だけm(_ _)m

引用:

結局やっていることは同じですが、特定のブラウザに依存したくない場合は、もうちょっと一工夫して、もともとのサーブレットの URI をそのファイル名にしておくという方法もあります。この場合はファイル名を動的に変えることが出来ないという問題がありますが、実はこれも servlet-mapping の設定次第でどうにでもなります。



私もこの方法を昔使っておりました。mappingを*にしてファイル名の妥当性チェック付きで動的に変更もしていました。
ですが、keisukenさんは知っているかもしれませんが、URLに日本語が含まれる(ファイル名に2バイト文字が含まれる)と今度はhttpd側で問題があるのでhttpdの種類に気をつけた方が良いかもしれません(apacheはものによってダメです)。

それと、keisukenさんが気にされているIE5.5のファイル名が認識されない問題については、keisukenさんなら知っているハズのMLでもServlet側で対応する事で簡単に解決出来る事になっていると思うのですが、どうでしょう?(^^;
それとも、keisukenさんが例としてあげたもの以外に、ブラウザの問題で何か僕が忘れてるのがあるのかな……?
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2003-04-21 21:39
「Servlet の URI 名そのものをファイル名にしておきレスポンス(ストリーム)として返す」の亜流ですが、
「ServletのURIの後にファイル名を付け加えたものをURIとして、レスポンスでファイル内容を返す」という手もあります。

Servlet名がfooで、ファイル名がbar.txtだとすると、
「http://なんとか/servlet/foo/bar.txt」のようなURIを使用するのです。

これで、IE5.5SP1の問題も含めて、概ね上手く行くはずです。<経験あり

スキルアップ/キャリアアップ(JOB@IT)