- PR -

URLを直接入力した場合の対処

投稿者投稿内容
9876
会議室デビュー日: 2004/03/31
投稿数: 16
投稿日時: 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を直接入力した場合、処理画面を表示させないで
エラー画面を表示するような処理を検討中です。
何か良い方法はないでしょうか?
やはりセッションとかを使うのでしょうか?
bubunya
大ベテラン
会議室デビュー日: 2003/01/16
投稿数: 124
投稿日時: 2004-04-23 17:50
URL直打ちを拒否したい理由は?
アンケートのようなもので複数ページにわたるものを正しく実行させるためでしょうか?

とりあえずはセッションかクッキーでも良いと思いますが、単純に入り口を固定させたいだけであればアプリケーションのセキュリティ設定だけでも事足りるのではないでしょうか。
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2004-04-23 20:07
引用:

9876さんの書き込み (2004-04-23 17:13) より:
URLを直接入力した場合、処理画面を表示させないで
エラー画面を表示するような処理を検討中です。
何か良い方法はないでしょうか?
やはりセッションとかを使うのでしょうか?


私も類似要件を考えたことあるんで参考までに。
(ちなみに2案ともボツになり、GET必須でクッキー制御となりました。結局考えただけ・・・ )

ブラウザからURL直接入力した場合って GET 要求になると思うのですが、
クライアントとの通信を全て POST にしてしまうというのはどうでしょう?
そうすれば、GET要求はエラー画面表示とする事ができます。

他には画面をServletで生成しているのなら GET 要求のクエリにユニークなIDを付けて
割り振ったID以外の要求が来たらエラー画面表示するなど。
この場合、ユニークなIDの管理さえ出来れば F5 などの連続更新にも対応できるかと・・・。

また、この手の投稿はよくみかけるので検索サイトで地道に探すと良い回答が見つかると思います。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-04-23 21:55
単に非表示フィールドを用意しておいてpostするだけじゃダメでしょうか?
その非表示フィールドがなけりゃ直打ちでしょう。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-04-23 22:48
どこまでナーバスにならなければならないのか……という、要件次第だと思います。

基本的にUAが送信してくる情報はあらかた捏造可能なはずなので、一般に公開するサイトで厳密にダイレクトアクセスをはじきたいのならセッション等、何がしかの情報をサーバー側で管理する必要があると思います。
社内からしか見えないのなら、大抵の場合はそこまでナーバスになる必要もないでしょう。
あとは、UA側の制約次第と思います。

セッションを使う場合も、実在するセッションのセッションIDを持っていればそれだけでOKにするのか、さらにそのセッションの中に表示を許可するコンテンツの識別コードまで持ってそれ以外へは絶対アクセスさせないのか等、色々な制限レベルがあります。

あまり厳密にアクセス管理を行い過ぎると「バック出来ない!」等、不便になったりしますので、要件をよく確認して、適切なレベルでとどめられる方がいいとは思います。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-04-24 16:27
永井さんやSJ0392さん同様の意見です。
クリティカルな処理でなければ、
単純にPOSTの処理しか受け付けないようにすれば
いいのではないでしょうか。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2004-04-25 12:16
お世話になっております。

 私が以前対処したときの方法は、正規のリクエストはすべてコントローラサーブレット経由でjspにフォワードするようにしておいて、サーブレット中で、HttpServletRequestにキーをバインドして、jsp側でそのキーがあるかどうかをチェックする、という感じでした。
 使用するすべてのjspにおいて、そのチェックを行う必要があるのが面倒ですが、チェック用のjspをincludeするようにして対処しました。
 アプリケーションサーバのセキュリティ機能を使えばもっと楽に制御できるのですが、案件の都合上、それが使えなかったので・・・。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 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) ;
}
}

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