データがフォームからのものであることを保証することはできません。 POST要求は単なるPOST要求であり、任意の数の方法で生成できます。 HTML形式は、の1つで、非常にユーザーフレンドリーです。サーバーは、POST要求を介して受信したデータが有効かどうか、およびそれに基づいて動作するかどうかを検証する必要があります。
このように、提出されているデータの制限と検証に役立つものがあります。まず、ユーザーが(セッション)Cookieを使用してログインしていることを要求します。これにより、匿名ユーザーによるランダムなリクエストが排除されます。第2に、トークンを隠しフィールドとしてフォームに埋め込み、ユーザーのセッションに保存することもできます。有効にするには、POST要求にそのトークンを含める必要があります。トークンは単なる擬似ランダム文字列です。
これを強化するには、ユーザーが送信すると予想されるフォームフィールドのハッシュを準備します。フォームの値を読み取り専用にする必要がある場合は、その値をハッシュに含めることもできます。例えば。:ちょうど簡単な例だ
$rand = md5(mt_rand());
$hash = sha1('lastname:firstname:email:' . $rand);
$_SESSION['rand'] = $rand;
$_SESSION['hash'] = $hash;
// on form submit:
$keys = array_keys($_POST);
$checkHash = sha1(join(':', $keys) . ':' . $_SESSION['rand']);
if ($checkHash != $_SESSION['hash']) {
die('Form submission failed token validation');
}
は、おそらくそれはのためのユニークなトークンを持っている必要がユーザーの概念を示していますが、同じハッシュを取得しますなどを確認するために、アルファベットのキーをソートしたいと思いますそれぞれの要求はフォームによるテンパリングを防ぎ、必要以上のデータを提出することを防ぎます。
これは、ユーザーが実際にフォームを使用してデータを送信したという意味ではありません。
このことはありがたいことですが、私はこの行為の他の含意について考えることはできませんでした。これらの問題は、このif(!isset($ _ SESSION ['hash'])){create hash} else {use existing hash} 'のようなものを使って回避することができると思います。 –