0

page1.phpに、POSTを介してvarsをpage2.phpに送信するフォームがあります。ただし、page1.phpから呼び出された場合にのみ、フォームを処理したいと思います。

これを確認するにはどうすればよいですか?

敬具!

編集:それは一種のセキュリティ対策です。私がハッカーで、ページのソースからフォームコードをコピーして実行すると、重要な変数を変更できます。

EDIT2:わかり
ました。実際の問題は次のとおりです。
ユーザーは自分のアカウントのクレジットを編集できます。彼らは5EURから50EURまでの値を選ぶことができます。
最終的に、それらはページ'deposit.php'に到達し、そこで最終フォームがページ'payments.php'に送信され、ページ'payments.php'が変数をPaypalに送信します。

Deposit.php:

<form class="paypal" action="paypal/payments.php" method="post" id="paypal_form" target="_blank">    
<input type="hidden" name="cmd" value="_xclick" /> 
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="lc" value="BE" />
<input type="hidden" name="currency_code" value="EUR" />
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynow_LG.gif:NonHostedGuest" />
<input type="hidden" name="item_number" value="50" / >
<input type="hidden" name="price" value="47.50" / >
<input type="submit" class="uibutton " value="Betaal met Paypal" style="width: 100%; font-size:120%;">

(ところで、50EURを追加すると割引が適用されます)

4

5 に答える 5

3

さて、まず第一に、あなたはそれを置く方法にセキュリティ対策がないことを理解する必要があります。そしてもちろん、他の参加者が提供する方法では、あなたの「重要な変数」を保護することはできません。彼らは実際に他の質問に答えていました、1つは彼らにもっと精通しています。

フォームは、クライアントの関係者が記入することを目的としています。したがって、どの変数も変更されないことを期待することはできません。どんな対策を講じても、クライアント側から来るものはすべてなりすましになる可能性があります。

したがって、「重要な変数」はすべてサーバーに残しておく必要があります。
フォームからのすべてのデータは安全でないと見なされ、それに応じて処理される必要があります。

于 2012-12-27T18:28:35.360 に答える
1

アプリケーションによって$_SERVER['HTTP_REFERER']は、チェックを使用して実行することもできますが、すべてのブラウザが送信するわけではなく、ユーザーが変更できるという問題があります。したがって、これがご存知の少数の人々だけの場合は、おそらく問題にはならないでしょう。これが世界向けの場合はお勧めしません。

私が通常行うことは、1ページでセッションを設定し、2ページでそのセッションを確認することです。1ページが読み込まれるたびに、セッションをリセットする必要があります。

page1.php

<?php
session_start();
$hash = $_SESSION['hash'] = md5(time().rand(0,100));
?>
<form action="page2.php" meethod="post">
    <input type="hidden" name="h" value="<?php echo $hash; ?>" />
    Your Name: <input type="text" name="name" />
</form>

page2.php

<?php
session_start();
if($_SESSION['hash'] != $_POST['h']){
    header("Location: page1.php");
    exit;
}

// process data
于 2012-12-27T18:20:40.143 に答える
0

アダムDの反応は弱すぎると思います(誰でもファイアバグを使ってそれを変えることができます)。防止したいのは、ユーザーがいくつかの手順をスキップするか、XSRFを回避することです。

その場合、私はセッションを使用すると言います。

  • セッションを作成する
  • 現在のステップを保存します
  • 現在のステップを取得して検証し、値に従って停止または続行します
于 2012-12-27T18:21:02.553 に答える
-2

フォームに、で確認する非表示フィールドを含めますpage2.php。下記参照:

<form action="post.php" method="POST">
  <input type="text" name="fname" id="fname" />
  <input type="hidden" name="cameFromPageOne" value="true" />
</form>

次に、の上部でpage2.php、非表示の変数が設定されていることを確認し、設定されていない場合は、にリダイレクトします。page1.php

<?php

if(!isset($_POST['cameFromPageOne']) || $_POST['cameFromPageOne'] != 'true') {
  header('location: http://www.example.com/page1.php');
  exit();
} else {
    // ... code to process if they DID come from page1.php
}

?>
于 2012-12-27T18:17:03.393 に答える
-3

それを過度に複雑にする理由はありません。PHPには、現在のスクリプトが要求されたURLを通知するグローバル変数があります。

echo $_SERVER["HTTP_REFERER"];
于 2012-12-27T18:22:40.037 に答える