ホームページ  >  記事  >  バックエンド開発  >  PHP プロジェクトで検証コードを実装し、ボット攻撃を防ぐにはどうすればよいですか?

PHP プロジェクトで検証コードを実装し、ボット攻撃を防ぐにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-11-03 17:40:561041ブラウズ

PHP プロジェクトで検証コードを実装し、ボット攻撃を防ぐにはどうすればよいですか?

PHP プロジェクトで検証コードを実装し、ロボット攻撃を防ぐにはどうすればよいですか?

インターネットの発展と普及に伴い、ますます多くの Web サイトやアプリケーションがロボット攻撃の脅威にさらされ始めています。ユーザー情報のセキュリティを保護し、優れたユーザー エクスペリエンスを提供するために、開発者はプロジェクトに検証コードとボット攻撃を防ぐ対策を実装する必要があります。この記事では、PHP プロジェクトで検証コードを実装し、ボット攻撃を防ぐ方法を紹介します。

1. 検証コードの実装
検証コードは、ロボット攻撃を防ぐための一般的な方法です。ユーザーはログイン時または登録時に本人確認のため認証コードを入力する必要があります。

  1. 検証コード イメージの生成
    PHP は、検証コード イメージの生成に使用できる豊富なグラフィック処理関数を提供します。以下はサンプル コードです。
session_start();
$code = rand(1000,9999);
$_SESSION['code'] = $code;

$width = 100; // 验证码图片宽度
$height = 30; // 验证码图片高度
$image = imagecreatetruecolor($width, $height);

$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);

imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);

imagettftext($image, 20, 0, 10, $height/2, $textColor, 'path/to/font.ttf', $code);

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
  1. ユーザー入力の検証
    ユーザーがフォームを送信するとき、ユーザーが入力した検証コードと生成された検証コードを比較して、ユーザーが正しく入力しました。以下はサンプルコードです:
session_start();
$code = $_SESSION['code'];

$userInput = $_POST['code'];

if ($userInput == $code) {
    // 验证码输入正确,继续处理用户提交的数据
} else {
    // 验证码输入错误,给用户一个提示
    echo "验证码输入错误";
}

2. ロボット攻撃防止の実装
検証コードは単純なロボット攻撃のみを防止できます。ロボット攻撃をより効果的に防止するために、次のようにすることもできます。次の対策:

  1. 隠しフィールドの追加
    フォームに隠しフィールドを追加し、サーバー側でフィールドの値が空かどうかを確認します。ボットは多くの場合、フォーム フィールドに自動的に入力するため、このフィールドにも入力し、ボットとしてのアイデンティティを明らかにします。
<input type="hidden" name="isHuman" value="">
if (!empty($_POST['isHuman'])) {
    // 非机器人提交,继续处理用户提交的数据
} else {
    // 机器人提交,停止处理并给用户一个提示
    echo "请不要使用机器人进行提交";
}
  1. リクエスト頻度の確認
    ユーザー リクエストの頻度に基づいて、ユーザーがロボットであるかどうかを判断します。たとえば、ある IP アドレスが短期間に大量のリクエストを送信し続ける場合、その IP アドレスはロボットであると判断できます。ユーザーリクエストのタイムスタンプとIPアドレスを記録し、実際のニーズに基づいて対応するポリシーを策定できます。
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = time();

$requests = $_SESSION['requests'];
if (!$requests) {
    $requests = [];
}

// 添加新的请求记录
$requests[] = ['ip' => $ip, 'timestamp' => $timestamp];

// 清理过期的请求记录
foreach ($requests as $key => $request) {
    if ($timestamp - $request['timestamp'] > 60) {
        unset($requests[$key]);
    }
}

$_SESSION['requests'] = $requests;

if (count($requests) > 10) {
    // 用户请求频率过高,判定为机器人攻击,给用户一个提示
    echo "您的请求过于频繁,请稍后再试";
} else {
    // 用户请求正常,继续处理用户提交的数据
}

上記の対策を組み合わせて適用することで、PHP プロジェクトにおける検証コードの効果とロボット攻撃の防止をより効果的に実現できます。開発者は、検証コードの形式や検証ルール、ロボット攻撃の判定条件などをニーズに合わせて柔軟に調整し、システムのセキュリティとユーザーエクスペリエンスを向上させることができます。

以上がPHP プロジェクトで検証コードを実装し、ボット攻撃を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。