まず確認コードの発行プロセスを分析しましょう
1.フォームを表示
2. 認証コードを表示し(認証コードを生成するプログラムを使用)、認証コードを暗号化してセッションまたはCookieに入れます
3. ユーザーがフォームを送信します
4. 検証コードが正しく、データが正当であることを確認します。データベースへの書き込みに関するチュートリアルは完了です
通常の状況では、ユーザーが別の投稿を投稿すると、フォーム ページに再度アクセスし、検証コードの画像が受動的に更新され、それに応じてセッションと Cookie も変更されます
ただし、注水マシンの操作には必ずしもフォーム ページを使用する必要はなく、この方法でデータをサーバー プログラムに送信することもできます。もちろん、検証コード プログラムは呼び出されません。暗号化された検証コードはセッションに保存され、Cookie が最後の値であるため、更新はなく、検証コードに関係なく、将来的には無制限にポストを通じてデータを直接送信できますが、これは役に立ちません。
そのため、認証コードを確認したら、まずセッションとCookieの値をクリアし、データの正当性を判断してデータベースに保存します。
こうして抜け穴は塞がれました!
if ( md5($_post['vcode']) == $_session['vcode'] ) {
$_session['vcode']='';//この文は非常に重要です
} その他 {
exit 「確認コードが間違っています!」 ';
}
//次の処理
...
?>
認証コード画像を生成するプログラム
session_start();
...
$v = 新しい認証コード();
$vcode = $v->getauthcode();
$_session['vcode'] = md5($vcode );
……
?>
フォームページ
確認コードがバイパスされる仕組み