PHPログイン時のCAPTCHA実装方法
PHPのログイン用CAPTCHAを実装するには、以下の手順に従ってください。
- セキュリティコードを生成する:
- imagecreatetruecolor 関数を使用して、幅と高さを設定したイメージリソースを作成する;
- imagecolorallocate関数で、キャプチャの背景色と文字色を設定します
- imagefill() 関数で画像に背景色を塗る;
- 作られた検証コードのテキストをimagettftext()関数を使って画像に描画する
- imagepng() 関数により、画像を出力します。
- imagedestroy()関数を使ってイメージリソースを破棄する。
- セキュリティコードを保存しますか?
- 生成された認証コードのテキストをセッションやその他の永続的なストレージに保存し、後続の検証に使用される。
- セキュリティコードを表示する:
- 生成された認証画像を、ログインページ上にHTMLの
タグを使用して表示させる。
- ユーザーの入力を検証する。
- ユーザーがログインフォームを送信する際に、ユーザーが入力した验证码と、以前に保存された验证码を照合する。
サンプルコードを以下に示します。これにより、キャプチャを生成して表示できます。
<?php
session_start();
// 生成验证码
$width = 100; // 验证码图片宽度
$height = 30; // 验证码图片高度
$length = 4; // 验证码长度
$code = ''; // 保存验证码字符串
for ($i = 0; $i < $length; $i++) {
$code .= chr(rand(97, 122)); // 生成随机小写字母
}
$_SESSION['captcha'] = $code; // 保存验证码到SESSION中
// 创建图像资源
$image = imagecreatetruecolor($width, $height);
// 设置背景颜色和文本颜色
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
// 填充背景颜色
imagefill($image, 0, 0, $bgColor);
// 绘制验证码文本
imagettftext($image, 20, 0, 10, 25, $textColor, 'path/to/font.ttf', $code);
// 输出图像
header('Content-Type: image/png');
imagepng($image);
// 销毁图像资源
imagedestroy($image);
?>
ログインページに、以下のHTMLコードでキャプチャ画像を表示する:
<img src="captcha.php" alt="验证码">
ユーザーがログインフォーム送信時に、以下のコードを使用してキャプチャを検証できます。
session_start();
$captcha = $_SESSION['captcha']; // 获取之前保存的验证码
$userInput = $_POST['captcha']; // 用户输入的验证码
if ($userInput === $captcha) {
// 验证码正确
// 其他登录验证逻辑...
} else {
// 验证码错误
// 错误处理逻辑...
}
実際の使用時には認証画像の安全性を高めるため、ノイズや回転、妨害線などの効果を追加することができ、また、検証時には画像認識ライブラリなどを使用したより複雑な方法を使うべきであることに注意してください。