ホームページ  >  記事  >  バックエンド開発  >  PHP はリモート フォーム送信関連の問題を防止します

PHP はリモート フォーム送信関連の問題を防止します

WBOY
WBOYオリジナル
2016-06-13 13:24:211151ブラウズ

PHP は、リモート フォーム送信の問題を防ぎます。
インターネット上でリモート フォームの送信を防ぐデモを見つけました。これは、次のように md5(uniqid(rand())) を使用してトークン検証を生成します。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
session_start();

if ($_POST['submit'] == “go"){
    //check token
    if ($_POST['token'] == $_SESSION['token']){
        //strip_tags
        $name = strip_tags($_POST['name']);
        $name = substr($name,0,40);
        //clean out any potential hexadecimal characters
        $name = cleanHex($name);
        //continue processing….
    }else{
        //stop all processing! remote form posting attempt!
    }
}

$token = md5(uniqid(rand(), true));
$_SESSION['token']= $token;

function cleanHex($input){
    $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);
    return $clean;
}

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<p><label for="name">Name</label>
<input type="text" name="name" id="name" size="20″ maxlength="40″/></p>
<input type="hidden" name="token" value="<?php echo $token;?>"/>
<p><input type="submit" name="submit" value="go"/></p>
</form>
?>




私の質問は次のとおりです:
セッション ID を保存する Cookie が見つかった場合、このフォームをリモートで送信し、いくつかの操作を通じてリクエストのヘッダーを変更し、入手したクッキーを入れます。
上記の方法が実行可能であれば、このコードでリモート フォームの送信を防ぐことができるのではないでしょうか?

-----解決策--------------------------------
これは必ずしもセッションではありません。定義は、サーバー側でセッション ファイルを生成し、それをサーバー側に配置し、アクセス時に Cookie を介してクライアントに配置される session_id を生成することです。 session では、クライアントの session_id を使用しますが、この session_id を使用して直接アクセスすることはできますか? サーバー側のセッション ファイルに直接アクセスする方法はありませんが、これは機能しません。リモートからのフォーム送信を防ぐためです。それ以外の場合は問題ありません。
------解決策------------------
sessionID は、見つかったとしても動的です。

ただし、コードで送信できるのは静的フォームのみです。ロボットによる送信を妨げるものではありません
私が最初にあなたのページに入る限り (もちろん、あなたのフォームが変更されたかどうかを知る必要があるので、それは必要です)、あなたの貴重なトークンは私の手の中にあります。 .. .
------解決策----------------------
ユーザーがアクセスできれば、コンピューターもアクセスできます

まずフォーム ページにアクセスしてトークンを取得し、フォームを送信して一緒にトークンを送信します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。