ホームページ >バックエンド開発 >PHPチュートリアル >当時の PHP の検証コードについての話、PHP 検証コード_PHP チュートリアル
現在、検証コードは Web サイトにおける非常に基本的な知識ポイントとなっています。検証コードの存在により、悪意のあるパスワードのクラッキング、チケット詐欺、およびその他の行為を防ぐことができます。特定のユーザーに対するブルートフォースクラッキングを効果的に防止できます。
それでは、当時 PHP で使用されていた検証コードについて学びましょう。
まず、4桁の認証コードを例に挙げます(同じ原理が複数桁の認証コードにも当てはまります)。
現在、ほとんどの Web サイトでは依然として静的画像検証コードが使用されています。これは実装が簡単で便利であり、もちろん、これが基礎でもあります。 原理は、PHPの描画機能を使用してテキストを画像に描画し、ページに返すことです。したがって、問題を解決するには 3 つのステップしかありません:
もちろん、PHP はデフォルトでは描画機能を有効にしていないため、まず php.ini 設定ファイルで描画機能を有効にします: ;extension=php_gd2.dll を検索し、その前のセミコロン を削除します。 (忘れずに保存してください!)
最初のポイントに基づいて、誰もがまずデジタル認証コードについて考えるべきです。それは簡単で、いくつかの数字をランダムに生成して、Jiang Zi のようにそれらを組み合わせるだけです。
では、よく考えてみてください。現在の Web サイトの認証コードには文字が含まれていますが、このものには文字がありません。何が問題なのでしょうか?そこで、上記を 16 進数に変換すればいいのではないかと考えました。
ちょっと賢すぎるように思えますが、考えてみてください。文字はいくつかありますが、a、b、c、d、e、f しかないので、すべての文字が必要な場合はどうなるでしょうか。はは、それについて考えたときに、文字列内のすべての文字と数字をリストし、ランダムな添え字を使用して
対応する値をランダムに取得することを思いつき、次のようになりました。
はは、最終的には認証コードの乱数のように見えますが、以下のメソッドを見ると、いつも混乱してしまいます:
リーリーstr_shuffle メソッドは文字列の内容をスクランブルし、substr($str, 0, 4) は最初の 4 つの数値を取得します。これは全く問題ありません!ただし、よく見ると、そのような確認コードの内容が繰り返されることはないことがわかります。
上記の検証コードが生成され、その後PHPで検証コードが描画されます。
もちろん、この場合、確認コードは黒い背景に白い文字だけなので、認識しやすくなりますが、さらに難易度を高めるために、確認コードに重ねて数行追加します。
結果はこのようになります。もちろん、検証コードを実装したい場合は、サーバーのセッション $_SESSION['validate'] に検証コードによって生成された乱数を保存する必要があります。 = $validateCode; そして、クライアントが入力した検証コードと比較するだけです。これは PHP の検証コードの実装方法です。もちろん、これは最も基本的なコードであり、アイデアに基づいて算術検証コードやその他の検証コードを実装することができます。退屈を減らし、より安全にするために。
他に素晴らしい確認コードを持っている人はいますか?
それは、php.ini で register_global = off になっているためです。
これを on に変更するだけですが、php5 以降はデフォルトで off に設定されています。
値を直接取得するのは安全ではないため、ユーザーがあなたの値を知っている場合は考えてください。セッションの名前
get メソッドまたは post メソッドを通じてセッションを変更できますか?
値を取得するために必要なのは名前だけだからです!
php5 は一般的にスーパーグローバル変数を使用します!
$_GET
$_POST
$_COOKIE
$_SESSION
元の投稿者の本は少し古いようで、session_register は推奨されなくなりました。 php5 に、 $_SESSION['yzm'] = 100; を直接割り当てることができるようになりました。
注: php6 がリリースされたと聞きました!
原因が判明しました: $rand 変数が初期化されておらず、直接出力すると警告が表示されます。解決策は、for ステートメントの前に $rand=''; を追加することです。問題はありません。
session_start();
$rand='';
for($i=0;$i $rand.=dechex(rand(0,15));
}
$_SISSION[ 'rand']=$rand;
$bg=imagecreatetruecolor(100,30);
$im=imagecolorallocate($bg,0,0,0);
$color=imagecolorallocate($bg,255,255,255);
imagestring ($bg,5,0,0,$rand,$color);
header("Content-type: image/jpeg");
imagejpeg($bg);