2009-05-31 19:04:05

指定のフォーム以外からpostさせない

テーマ:ColdFusionメモ
画面からデータを入力し、そのデータを他の画面に表示させるには、例えば、
以下のtest1.cfmからデータを入力し、post1.cfmでデータを表示させます。

【test1.cfm】
01: <form action="post1.cfm" method="post">
02: 入力したテキストをsendボタンを押して表示する。<br>
03: <input type="text" name="data"><br>
04: <input type="submit" value="send">
05: </form>


【post1.cfm】
01: <cfoutput>
02: ●以下のテキストを入力しました。<br>
03: #form.data#
04: </cfoutput>


test1.cfmと同じ内容のtest2.cfmを作っても、post1.cfmは同様に表示します。

単純なものなら問題ないですが、ユーザ登録するような重要な画面であれば、勝手に登録されると困ります。
上記のように単純であれば、外部の入力フォームからユーザ登録されるかもしれません。

そうならないためには、
post1.cfmに来たデータは、必ずtest1.cfmから来た
と認識できればよいです。

以下のようなプログラムを作ってみました。


【Application.cfm】
01: <cfapplication name="test_ame_test01_sys" sessionmanagement="yes"
02:             sessionTimeout = "#CreateTimeSpan(1, 0, 0, 0)#">


【test2.cfm】
01: <cfset session.chk = createUUID()>
02: <cfoutput>
03: <form action="post2.cfm" method="post">
04: 入力したテキストをsendボタンを押して表示する。<br>
05: <input type="text" name="data"><br>
06: <input type="hidden" name="chk" value="#session.chk#">
07: <input type="submit" value="send">
08: </form>
09: </cfoutput>


【post2.cfm】
01: <cfparam name="session.chk" default="#createUUID()#">
02: <cfif session.chk neq form.chk>
03: 所定のフォームからではありません。
04: <cfelse>
05: <cfoutput>
06: ●以下のテキストを入力しました。<br>
07: #form.data#
08: </cfoutput>
09: </cfif>
10: <cfset structDelete(session, "chk")>


【Application.cfm】
sessionスコープを有効にしています。
sessionスコープの変数は、サーバのメモリで保持されます。

【test2.cfm】
createUUID関数で、ユニークな文字列を生成しています。
この値をsession.chk変数にセットします。
また、inputタグにもセットします。

【post2.cfm】
session.chk変数とform.chk変数の値が同じであれば、test2.cfmから来たと認識します。
session.chk変数がない場合は、createUUID関数でユニークな値を生成。
よっぽどのことがない限りform.chk変数の値と同じになることはありません。
最後の行はsession.chk変数を削除しています。


test2.cfmが実行された時のソースを見た場合、

01: <input type="hidden" name="chk" value="xxx">

が、test1.cfmに追加された程度に見えます。
xxxの部分は毎回変化しますので、固定値をとることができません。
もしUUIDをセットすることがわかったとしても、session変数自体が外部からセットできませんので、エラーとなります。

これで外部からpostしても入力したデータは表示されません。


今回は1回だけのpostする方法でしたが、ColdFusionでは連続でpostすることもできます。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

うたらぼさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。