Next Page

1

Previous Page

スレッド: Webページの画面遷移を制御

作成日: 02/07/08 11:25 PM

返信: 4

phe


常連


入会日: 01/29/08

投稿数: 45

Webページの画面遷移を制御
01/29/08 10:27 PM

いつもお世話になっております。
WEBページの画面を一方向にしか遷移させないように制御
したいのですが、何か良い方法は無いでしょうか?

ページ3→ページ2→ページ3とユーザがリンクやボタンを使って画面を遷移させているのですが、
URLを直接入力されたり、戻るボタンを押されることに前のページに戻ってしまうことを防ぎたいのです。

ページにhiddenテキストボックスを埋め込んでhiddenテキストボックスが前のページからPOSTで送られてきたかどうか判断する方法、
ページにアクセス時にSession変数にページIDをセットして
次のページにアクセス時に前のページIDが入っているかチェックする方法、
CGI変数より、HTTP_REFERERの値を取得して前のページから来たかどうか判断する方法
等、色々考えてみましたが、どういったやり方が良いのでしょうか?よろしくお願いします。

Link | Top | Bottom

AXL


長老


入会日: 02/02/08

投稿数: 246

Re: Webページの画面遷移を制御
02/03/08 8:41 AM

IsDefined ファンクションを使うことによって、URL直接入力によるページアクセスを防ぐことができます。
例えば、

page1.cfm
---------
<html>
<head><title>Page1</title></head>
<body>
<form action="page2.cfm" method="post">
  <input type="submit" name="submit1" value="To Page 2" />
</form>
</body>
</html>

page2.cfm
------------
<!---
  もしユーザーが直接このページにアクセスしようとしたら、
  page1.cfm ページにリディレクトさせ、ユーザーがTo Page 2
  ボタンを押したときだけ、page2.cfm ページを参照することが
  できるようにします。
--->
<cfif NOT IsDefined("FORM.submit1")>
  <cflocation url="page1.cfm">
</cfif>

<html>
<head><title>Page2</title></head>
<body>
<form action="page3.cfm" method="post">
    <input type="submit" name="submit2" value="To Page 3" />
</form>
</body>
</html>

イメージをボタンとして使いたい場合は、

page1.cfm
---------
<html>
<head><title>Page1</title></head>
<body>
<form action="page2.cfm" method="post">
  <input type="image" src="button.jpg" name="submit1" />
</form>
</body>
</html>

page2.cfm
------------
<!--- 
  イメージボタンがクリックされた時に定義されるイメージの
     x座標値またはy座標値を使って、
     URL直接入力によるページアクセスを防ぐことができます。
--->
<cfif NOT IsDefined("FORM.submit1.x")>
  <cflocation url="page1.cfm">
</cfif>

<!--- y座標値を使う場合は,
<cfif NOT IsDefined("FORM.submit1.y")>
  <cflocation url="page1.cfm">
</cfif>
--->

<html>
<head><title>Page2</title></head>
<body>
<form action="page3.cfm" method="post">
    <input type="image" src="button.jpg" name="submit2" />
</form>
</body>
</html>

Link | Top | Bottom

phe


常連


入会日: 01/29/08

投稿数: 45

Re: Webページの画面遷移を制御
02/04/08 11:13 PM

返信ありがとうございます。

このFORM変数のチェックにSession変数のチェックも合わせたら
何とかならないかなと思って次のように考えてみました。

1.ページ1を開いたときにSession変数に"PAGE1"をセット
2.ページ2に遷移するときにFORM変数に"PAGE1"をセットしてPOSTで遷移
3.ページ2を開いたらSession変数の値とFORM変数の値が一致しているかチェック
4.一致していなかったらエラー
5.チェック後Session変数の値に"PAGE2"をセット
の様にすれば、URL直接入力と、F5更新を防げるのかなとは思います。
何処か穴はありそうですが・・・・

Link | Top | Bottom

katz


一人前


入会日: 05/31/07

投稿数: 140

Re: Webページの画面遷移を制御
02/04/08 11:34 PM

基本的に仰ったとおり、Form変数とSession変数を組み合わせることで防げるはずです。
但し、ブラウザーが1ウインドウしか開いていないことと、毎回ブラウザがリクエストを投げること(戻るボタンで戻った時にキャッシュから読み込ませない)が条件です。
複数のウインドウを開いて、それぞれでステップを進めていくと、予期しない所でエラーとなってしまうことがあります。

そのあたりの詳しいことは
CSRF対策に「ワンタイムトークン」方式を推奨しない理由
に書かれていますので、一読してみることをオススメします。

Link | Top | Bottom

phe


常連


入会日: 01/29/08

投稿数: 45

Re: Webページの画面遷移を制御
02/08/08 8:25 AM

あぁ!複数ウィンドウ開く手がありますね。。。
「ワンタイムトークン」方式を使うかどうか検討してます。
2ウィンドウで開いて編集する可能性は低いので、そこまでシビアに
なら無くても良いのかもいいのかもしれないですが、できちゃいますからね。。

ただ、やっていてここまで画面制御をがっちりするべきだったかな
と考えてしまいした。
戻ったり、直接URLして、変な動きをしたとしても
それで、データが消えたり、情報が漏れたりするのだったら
問題ですが、ユーザや、管理者に不利益にならないレベルだったら
妥協する手もありかな。。

Link | Top | Bottom

Next Page

1

Previous Page

新規投稿

ログイン して返信して下さい。