ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してヒューマンマシン認証を実装し、悪意のある動作を防ぐ方法

PHP を使用してヒューマンマシン認証を実装し、悪意のある動作を防ぐ方法

WBOY
WBOYオリジナル
2023-09-05 16:04:451432ブラウズ

如何使用 PHP 实现人机验证和防止恶意行为

PHP を使用して人間とコンピュータの検証を実現し、悪意のある動作を防止する方法

インターネットの急速な発展に伴い、ネットワーク セキュリティの問題がますます顕著になってきています。悪意のある行為が増加しているため、当社の Web サイトとユーザーのセキュリティを保護するための措置を講じる必要があります。一般的な方法は、人間とボットの検証技術を使用して、実際のユーザーとボットを区別することです。この記事では、PHP を使用してヒューマン マシン認証を実装し、悪意のある動作を防止する方法について説明し、対応するコード例を示します。

  1. 検証コードを使用する

検証コードは、フォームを送信するとき、または特定の操作を実行するときにユーザーが検証コードを入力することを証明するための基本的なヒューマンマシン検証テクノロジです。ボットではなく実際のユーザーです。以下は、PHP を使用して単純な検証コードを実装するサンプル コードです。

<?php
session_start();
 
// 生成随机验证码字符串
$length = 6;   // 验证码长度
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randStr = '';
for($i = 0; $i < $length; $i++) {
  $randStr .= $chars[rand(0, strlen($chars) - 1)];
}
 
// 将验证码字符串保存到 session 中
$_SESSION['captcha'] = $randStr;
 
// 绘制验证码图片
$image = imagecreatetruecolor(100, 30);
$bgColor  = imagecolorallocate($image, 255, 255, 255);   // 背景颜色
$fontColor = imagecolorallocate($image, 0, 0, 0);   // 文字颜色
imagefill($image, 0, 0, $bgColor);
imagestring($image, 5, 25, 5, $randStr, $fontColor);
 
// 输出验证码图片
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

上記のコードは、長さ 6 の検証コード文字列を生成し、セッションに保存します。検証コードの生成中に、検証コードをユーザーに表示するための検証コード画像も描画されます。

  1. ユーザー入力の確認

ユーザーがフォームを送信するとき、ユーザーが入力した確認コードが正しいかどうかを確認する必要があります。以下は、PHP を使用してユーザーが入力した検証コードを検証するサンプル コードです。

<?php
session_start();
 
// 获取用户提交的验证码
$captcha = $_POST['captcha'];
 
// 获取保存在 session 中的验证码
$correctCaptcha = $_SESSION['captcha'];
 
// 验证用户输入的验证码是否正确
if($captcha === $correctCaptcha) {
  // 验证码正确,执行后续操作
} else {
  // 验证码错误,给出相应提示
}
?>

上記のコードは、ユーザーが送信した検証コードを取得し、セッションから正しい検証コードを取得します。次に、2 つを比較します。値が等しい場合は、検証コードが正しく入力され、その後の操作を実行できることを意味します。値が等しくない場合は、検証コードが間違って入力されたことを意味し、対応するプロンプトを表示する必要があります。

  1. IP アドレス制限

確認コードの使用に加えて、ユーザーの IP アドレスに基づいてアクセスを制限することもできます。悪意のある動作の場合、ボットが攻撃に使用されることが多く、ボットのリクエストには同様の IP アドレスが含まれることがよくあります。そのため、ユーザーのIPアドレスに基づいて制限を行うことができますが、同じIPアドレスが短期間に頻繁にWebサイトにアクセスする場合は、悪意のある行為である可能性があります。

以下は、PHP を使用して IP アドレスに基づいてアクセスを制限するサンプル コードです。

<?php
$allow = true;   // 是否允许访问
 
// 获取用户的 IP 地址
$clientIP = $_SERVER['REMOTE_ADDR'];
 
// 获取用户访问的时间戳
$accessTime = time();
 
// 获取保存在 session 中的 IP 地址和访问时间
$sessionIP = $_SESSION['ip'];
$sessionTime = $_SESSION['time'];
 
// 判断用户与上一次访问的时间差
$timeDiff = $accessTime - $sessionTime;
if($timeDiff < 10 && $clientIP === $sessionIP) {
  $allow = false;   // 访问间隔过短,可能是恶意行为
}
 
// 更新 session 中的 IP 地址和访问时间
$_SESSION['ip'] = $clientIP;
$_SESSION['time'] = $accessTime;
 
// 输出结果
if($allow) {
  // 允许访问,继续执行后续操作
} else {
  // 不允许访问,给出相应提示
}
?>

上記のコードは、現在アクセスされている IP アドレスと最後にアクセスされた IP アドレスを比較することによって判断されます。時間間隔、アクセスが許可されるかどうか。短期間に同じIPアドレスに複数回アクセスがあった場合は、悪意のある動作である可能性があります。

概要

この記事では、PHP を使用して人間とコンピューターの検証を実現する方法と、IP アドレスに基づく検証と制限に検証コードを使用するなど、悪意のある動作を防ぐための基本的な方法を紹介します。これらの方法は、Web サイトとユーザーのセキュリティを効果的に保護できます。もちろん、他にも高度で複雑な手法を使用できますが、上記の方法はすでに比較的一般的で簡単です。読者の皆様にはこの点をご理解いただき、実際のプロジェクトに応用していただければ幸いです。自身のネットワーク セキュリティ意識を継続的に学習し、向上させることは、Web サイトとユーザーのセキュリティを保護するために重要です。

以上がPHP を使用してヒューマンマシン認証を実装し、悪意のある動作を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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