- - PR -
URLを直接入力した場合の対処
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-04-23 17:13
開発環境
os:windows2000 professional eclipse 2.1.2 Apache Tomcat 5.0.19 j2se 1.4.2 Lomboz 2.1.2 jstl 1.1 こんにちは URLを直接入力した場合、処理画面を表示させないで エラー画面を表示するような処理を検討中です。 何か良い方法はないでしょうか? やはりセッションとかを使うのでしょうか? | ||||
|
投稿日時: 2004-04-23 17:50
URL直打ちを拒否したい理由は?
アンケートのようなもので複数ページにわたるものを正しく実行させるためでしょうか? とりあえずはセッションかクッキーでも良いと思いますが、単純に入り口を固定させたいだけであればアプリケーションのセキュリティ設定だけでも事足りるのではないでしょうか。 | ||||
|
投稿日時: 2004-04-23 20:07
私も類似要件を考えたことあるんで参考までに。 (ちなみに2案ともボツになり、GET必須でクッキー制御となりました。結局考えただけ・・・ ブラウザからURL直接入力した場合って GET 要求になると思うのですが、 クライアントとの通信を全て POST にしてしまうというのはどうでしょう? そうすれば、GET要求はエラー画面表示とする事ができます。 他には画面をServletで生成しているのなら GET 要求のクエリにユニークなIDを付けて 割り振ったID以外の要求が来たらエラー画面表示するなど。 この場合、ユニークなIDの管理さえ出来れば F5 などの連続更新にも対応できるかと・・・。 また、この手の投稿はよくみかけるので検索サイトで地道に探すと良い回答が見つかると思います。 | ||||
|
投稿日時: 2004-04-23 21:55
単に非表示フィールドを用意しておいてpostするだけじゃダメでしょうか?
その非表示フィールドがなけりゃ直打ちでしょう。 | ||||
|
投稿日時: 2004-04-23 22:48
どこまでナーバスにならなければならないのか……という、要件次第だと思います。
基本的にUAが送信してくる情報はあらかた捏造可能なはずなので、一般に公開するサイトで厳密にダイレクトアクセスをはじきたいのならセッション等、何がしかの情報をサーバー側で管理する必要があると思います。 社内からしか見えないのなら、大抵の場合はそこまでナーバスになる必要もないでしょう。 あとは、UA側の制約次第と思います。 セッションを使う場合も、実在するセッションのセッションIDを持っていればそれだけでOKにするのか、さらにそのセッションの中に表示を許可するコンテンツの識別コードまで持ってそれ以外へは絶対アクセスさせないのか等、色々な制限レベルがあります。 あまり厳密にアクセス管理を行い過ぎると「バック出来ない!」等、不便になったりしますので、要件をよく確認して、適切なレベルでとどめられる方がいいとは思います。 | ||||
|
投稿日時: 2004-04-24 16:27
永井さんやSJ0392さん同様の意見です。
クリティカルな処理でなければ、 単純にPOSTの処理しか受け付けないようにすれば いいのではないでしょうか。 | ||||
|
投稿日時: 2004-04-25 12:16
お世話になっております。
私が以前対処したときの方法は、正規のリクエストはすべてコントローラサーブレット経由でjspにフォワードするようにしておいて、サーブレット中で、HttpServletRequestにキーをバインドして、jsp側でそのキーがあるかどうかをチェックする、という感じでした。 使用するすべてのjspにおいて、そのチェックを行う必要があるのが面倒ですが、チェック用のjspをincludeするようにして対処しました。 アプリケーションサーバのセキュリティ機能を使えばもっと楽に制御できるのですが、案件の都合上、それが使えなかったので・・・。 | ||||
|
投稿日時: 2004-04-26 11:21
サーブレットならget、postで分りますよね。
参考になるといいですね。 public void doGet(HttpServletRequest request,HttpServletResponse response) { String jspName = null; jspName = "/jsp/error.jsp"; callShowPage(jspName, request, response); } protected void callShowPage(String page , HttpServletRequest request, HttpServletResponse response){ ServletContext servletContx = null; RequestDispatcher requestDisp = null; try { servletContx = getServletContext(); requestDisp = servletContx.getRequestDispatcher(page); requestDisp.forward(request, response); } catch(Throwable e) { callShowPageError(response , page , e) ; } } | ||||
