当時の PHP の検証コードについて話しましょう、PHP 検証コード
現在、検証コードは Web サイトにおける非常に基本的な知識ポイントとなっています。検証コードの存在により、悪意のあるパスワードのクラッキング、チケット詐欺、およびその他の行為を防ぐことができます。特定のユーザーに対するブルートフォースクラッキングを効果的に防止できます。
それでは、当時 PHP で使用されていた検証コードについて学びましょう。
まず、4桁の認証コードを例に挙げます(同じ原理が複数桁の認証コードにも当てはまります)。
現在、ほとんどの Web サイトでは依然として静的画像検証コードが使用されています。これは実装が簡単で便利であり、もちろん、これが基礎でもあります。 原理は、PHPの描画機能を使用してテキストを画像に描画し、ページに返すことです。したがって、問題を解決するには 3 つのステップしかありません:
もちろん、PHP はデフォルトでは描画機能を有効にしていないため、まず php.ini 設定ファイルで描画機能を有効にします: ;extension=php_gd2.dll を検索し、その前のセミコロン を削除します。 (忘れずに保存してください!)
最初のポイントに基づいて、誰もがまずデジタル認証コードについて考えるべきです。それは簡単で、いくつかの数字をランダムに生成して、Jiang Zi のようにそれらを組み合わせるだけです。
![](http://www.bkjia.com/uploads/allimg/141105/164R94437-0.gif)
1 $validateCode = ''
;
2 for (
$i = 0;
$i $i ++
) {
3 $validateCode .=
rand(0, 9
);
4}
5 エコー $validateCode;
コードを表示
では、よく考えてみてください。現在の Web サイトの認証コードには文字が含まれていますが、このものには文字がありません。何が問題なのでしょうか?そこで、上記を 16 進数に変換すればいいのではないかと考えました。
![](http://www.bkjia.com/uploads/allimg/141105/164R94437-0.gif)
1 $validateCode = ''
;
2 for (
$i = 0;
$i $i ++
) {
3 $validateCode .=
dechex(
rand(0, 16
));
4}
5 エコー $validateCode;
コードを表示
ちょっと賢すぎるように思えますが、考えてみてください。文字はいくつかありますが、a、b、c、d、e、f しかないので、すべての文字が必要な場合はどうなるでしょうか。はは、それについて考えたときに、文字列内のすべての文字と数字をリストし、ランダムな添え字を使用して
対応する値をランダムに取得することを思いつき、次のようになりました。
![](http://www.bkjia.com/uploads/allimg/141105/164R94437-0.gif)
1 $validateCode = ''
;
2 $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
;
3 for (
$i = 0;
$i $i ++
) {
4 $validateCode .=
$str[
rand(0,
strlen(
$str))];
5}
6 エコー $validateCode;
コードを表示
はは、最終的には認証コードの乱数のように見えますが、以下のメソッドを見ると、いつも混乱してしまいます:
リーリー
str_shuffle メソッドは文字列の内容をスクランブルし、substr($str, 0, 4) は最初の 4 つの数値を取得します。これは全く問題ありません!ただし、よく見ると、そのような確認コードの内容が繰り返されることはないことがわかります。
上記の検証コードが生成され、その後PHPで検証コードが描画されます。
![](http://www.bkjia.com/uploads/allimg/141105/164R94437-0.gif)
1 $validateCode =
substr(
str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'), 0, 4
);
2
3 // 幅110px、高さ25pxの画像を作成します
4 $img = imagecreatetruecolor(110, 25
);
5 // 画像の背景色を黒に設定し、色の値はRGBに対応します
6 $bgcolor = imagecolorallocate(
$img, 0, 0, 0
);
7
8 // ホワイトを作成する
9 $white = imagecolorallocate(
$img, 255, 255, 255
);
10
11 // 2 番目のパラメータはテキストのサイズで、1 ~ 5 の範囲のみを指定できます。3 番目のパラメータは x 座標、4 番目のパラメータは y 座標です。 5 番目のパラメータはテキストの内容、6 番目のパラメータはテキストの色です
12 imagestring(
$img,
rand(3, 5),
rand(0, 80),
rand(2, 10),
$validateCode,
$white);
13
14 // 2 番目のパラメータはテキストのサイズで、1 ~ 5 の範囲のみを指定できます。3 番目のパラメータは x 座標、4 番目のパラメータは y 座標です。 5 番目のパラメータはテキストの内容、6 番目のパラメータはテキストの色です
15 imagestring(
$img,
rand(3, 5),
rand(0, 80),
rand(2, 10),
$validateCode,
$white);
コードを表示
もちろん、この場合、確認コードは黒い背景に白い文字だけなので、認識しやすくなりますが、さらに難易度を高めるために、確認コードに重ねて数行追加します。
![](http://www.bkjia.com/uploads/allimg/141105/164R94437-0.gif)
1 $validateCode =
substr(
str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'), 0, 4
);
2
3 // 幅110px、高さ25pxの画像を作成します
4 $img = imagecreatetruecolor(110, 25
);
5 // 画像の背景色を黒に設定し、色の値はRGBに対応します
6 $bgcolor = imagecolorallocate(
$img, 0, 0, 0
);
7 // imagefill($img, 10, 10, $bgcolor);
8
9 // 白を作成します
10 $white = imagecolorallocate(
$img, 255, 255, 255
);
11
12 for (
$i = 0;
$i $i ++
) {
13 // 画像上に線を描きます。2 番目のパラメータは線の x 開始座標を表し、3 番目のパラメータは線の y 開始座標を表し、4 番目のパラメータは線の終了座標を表します。 x、5番目のパラメータはyの終了座標を表し、6番目のパラメータはここでランダムな色を生成します。
14 imageline(
$img,
rand(0, 110),
rand(0, 50),
rand(0, 110),
rand(0, 50), imagecolorallocate(
$ img,
rand(0, 255),
rand(0, 255),
rand(0, 255
)));
15}
16
17 // 2 番目のパラメータはテキストのサイズで、1 ~ 5 の範囲のみを指定できます。3 番目のパラメータは x 座標、4 番目のパラメータは y 座標です。 5 番目のパラメータはテキストの内容、6 番目のパラメータはテキストの色です
18 imagestring(
$img,
rand(3, 5),
rand(0, 80),
rand(2, 10),
$validateCode,
$white);
19
20 // 画像に戻る
21 header('Content-type: image/png'
);
22imagepng(
$img);
コードを表示
![](http://www.cnblogs.com/wuyuchang/p/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAAAbCAIAAAAS1i3eAAADlUlEQVRoge2YP0/jMBjG3RXdiJBOHewkoixlYYWliAoWdIKP0OVG1AGmmxC6rcvRjYmVT9Chw0nolnyGbqy3VKxIveERj97aieP8O0DiUVS5jv/+8ry2E6U+ta7ZvGfl7Paf32QkH1sWx93+8yfHKpIcQyD+Nn9bHtGHFVCGO7FdlI+dnRZbb1Ozea9UOEuOX3qm4dF8XI4S4iTdm6R7hVVaRJnJcbv/q+bV5BCzBIjAFwgR+t8o66v+w8h7HoTonn4KZa2SdVEO0i7T7zm0V6vVarWS6d3+MzNn8x7Tbsm8zOYtCZrj24cG2mpNmD+C1wIEP74xyuHxwfD4YJB23zNHiQ/hXIFaKyi/TQ+tHAD1VLm/uLq/uCrdUw25G0g4IKTdhKUGFkoX5fj2YZB2AdTDFEBbYto5G3v2XzpRSpVHKdPNo2Roc/+pw/Tnn++83LuTH0tca5kOvs7ZmBePii5KudWoLFj+uw2jfOzsyFVS7uYqOPDzfCqxWnBDDoDyvN05G2P+4FvoSv9f6xZUDuXi675aR2ntNhZKqNCkSjCl7yzrQcTnca7KeX22Jm9hdelkorw7Ob07OXULl7akhdKyJJRJE7KASmoE5/rUb0DLtoGvz9Zp/Gg5PFoO1frKYFUBRP6tG90SZSZHlY+SyEJMWuEFjhD9q60SHEEQEPMEghKiyvoUVAXl5vRmc3qTxxECzUzTSblMM/EV7vulPuSAYyFB5dhQqhmUSADo5vSGtyS1Qdp92dp42doIaXOS7gFooQFdoGU/bh8th7N5r4INLTWGEpYENTKVWNWrMT1AXQOGBD5VCiID2f/BopAg1QxKcHRP6cqxKhdN0gxcAf1AK0BEOo9jng1HTwvrQn7mN/OKrsxDSUmmABce75Rr0nCIIHh5fX55fY6cTI4uLBecq9KWHB1uu5mLr/vYbfwo1StBK/wrAFVlAp/4CJFcZvNeOCy/qkT36HBbAn3s7PhRuvErD0ZkWg2oygn80dNC4suERUuGr4Z5CoruJEmiKOJvkiRxHBtj4jiOoiiOYySQxi/KRFGktY5ehRa01shEGdZFRTQr+0IxrTUL4xcl0RQSWmtjjDGGnaJB+dfqkaNCC+iLA0uShP2iO7TPETLB0eIuq8v24zhWsibSnB5nyylZaORwOUSJng1ad+MsybHykXB48gnJNgmdLYOvbFA+dYlSTsEyirzLh8HxG2OQz4601v8AyNFY5f3+nDsAAAAASUVORK5CYII=)
結果はこのようになります。もちろん、検証コードを実装したい場合は、サーバーのセッション $_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);
http://www.bkjia.com/PHPjc/905903.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/905903.html技術記事当時の PHP の検証コードについて話しましょう。 PHP 検証コード 現在、検証コードの存在は、悪意のあるパスワードのクラッキングやチケット詐欺などを防ぐことができます。