私は少し混乱しています。クラシック ASP の 1 つのページが Get メソッドによってアクセスされないように保護したいと考えています。誰かが別のサーバーから私のページにデータを投稿できる可能性はありますか?
はいの場合、それを検出してサーバーからの投稿のみを許可する方法。
手伝ってくれてありがとう。
私は少し混乱しています。クラシック ASP の 1 つのページが Get メソッドによってアクセスされないように保護したいと考えています。誰かが別のサーバーから私のページにデータを投稿できる可能性はありますか?
はいの場合、それを検出してサーバーからの投稿のみを許可する方法。
手伝ってくれてありがとう。
現在 Request("ParameterName") を使用してパラメーターを取得している場合は、POST された場合にのみパラメーターを取得する Request.Form("ParameterName") に変更する必要があります。
または、Request.ServerVariables コレクションからページへのアクセスに使用されるメソッドを検索し、POST でない場合はスクリプトを終了することもできます。次に例を示します。
If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then Response.End
サーバーからの投稿のみを受け付けたいとおっしゃっていました。上記の変更により、別の Web ページをページに POST するように設定できます。自分の Web ページだけが投稿できるようにしたい場合は、さらに保護を追加する必要があります。ここにそれを行う1つの方法があります。
1) フォームをレンダリングするときに、乱数を作成し、後で確認する値を持つ乱数で名前を付けたセッション変数を作成します。
Randomize
strVarName = Int((999999 - 100000 + 1) * Rnd() + 100000)
Session(strVarName) = "Authorised"
2) フォームに、乱数の値を含む隠しフィールドを追加します。
<input type="hidden" name="varname" value="<%= strVarName %>" />
3) 投稿されたフォームを処理するスクリプトで、隠しフィールドの値を取得します。
strVarName = Request.Form("varname")
4) セッション変数が設定されていて、値が True であることを確認します。
If Session(strVarName) <> "Authorised" Then
'Failed! Either show the user an error message or stop processing
Response.End
End If
5) セッション変数を削除して、同じフォームを再送信できないようにします。
Session.Items.Remove(strVarName)
乱数は必要ありませんが、乱数を使用すると、同じユーザーが異なるウィンドウ/タブで複数のフォームを開くことができ、それぞれが機能します。