ホームページ  >  記事  >  バックエンド開発  >  PHP を使用して検証コード function_PHP チュートリアルを実装する

PHP を使用して検証コード function_PHP チュートリアルを実装する

WBOY
WBOYオリジナル
2016-07-21 16:09:34878ブラウズ

作者:hutuworm 来源:糊涂馋寺
目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了
验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,
图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输
入表单提交网站验证,验证成功后才能使用某项功能。

我们这里展示了如何编写PHP程序实现验证码功能:

代码一: 

    /*
* Filename: authpage.php
* Author: hutuworm
* Date: 2003-04-28
* @Copyleft hutuworm.org
*/

srand((double)microtime()*1000000);

//验证用户输入是否和验证码一致
if(isset($HTTP_POST_VARS['authinput']))
{
if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
echo "验证成功!";
else
echo "验证失败!";
}

//生成新的四位整数验证码
while(($authnum=rand()%10000)<1000);
?>
       


       
                请输入验证码:

               
                >
                >
       

       

代码二:

/*
* Filename: authimg.php
* Author: hutuworm
* Date: 2003-04-28
* @Copyleft hutuworm.org
*/

//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);
$im = imagecreate(58,28);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
imagefill($im,68,30,$gray);

//将四位整数验证码绘入图片
imagestring($im, 5, 10, 8, $HTTP_GET_VARS['authnum'], $black);

for($i=0;$i<50;$i++) //加入干扰象素
{
imagesetpixel($im, rand()%70 , rand()%30 , $black);
}

ImagePNG($im);
ImageDestroy($im);
?>

 

本文程序在Apache 2.0.45 + PHP 4.3.1环境下运行通过。

上記は検証コード機能の単純な実装であり、商用セキュリティの問題は考慮されていません。セキュリティを強化してこの機能を商用アプリケーションに組み込む場合は、次の手順で実現できます:

1. セッションを有効にします。
2. authimg.php で authnum が生成され、md5sum が計算されてセッションに保存されます。
3. authpage.php は authinput から md5sum を計算した後、セッション内の authnum (md5sum) と比較して検証結果を取得します。


このサイトからの注: 作者はシンプルなコードを使用してクールな関数を実装しました。ただし、干渉ピクセルを追加した場合の効果はあまり良くありません。Yusheng フォーラム (http://ror.cn/perl/ut/user_login.cgi) にログインするときに確認コードを確認してください。 2番目のコードは少し時間が経過すると、同様の効果が生成されました。

変更されたコードは次のとおりです:

/*
* ファイル名: authimg.php
* 著者:hutuworm
* 日付: 2003-04-28
* @Copylefthutuworm.org
*/
/ /検証コードを生成する image
Header("Content-type: image/PNG");
$im = imagecreate(62,20); $ im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
imagefill($im,68,30,$gray); ( ($authnum=rand()%100000)<10000);
//4 桁の整数の検証コードを画像に描画します
imagestring($im, 5, 10, 3, $authnum, $black
); for($ i=0;$i<200;$i++) //干渉ピクセルを追加します
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel( $im , rand()%70 , rand()%30 , $randcolor);
ImagePNG($im)
?>



;

http://www.bkjia.com/PHPjc/314520.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/314520.html

著者:hutuworm 出典:Muddle-headed Temple   現在、多くの Web サイトでは検証コード技術を使用して、ユーザーがロボットを使用して自動的に登録、ログイン、スパムを送信することを防止しています。いわゆる認証コードは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。