Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan PHP untuk melaksanakan pengesahan mesin manusia dan mencegah tingkah laku berniat jahat

Cara menggunakan PHP untuk melaksanakan pengesahan mesin manusia dan mencegah tingkah laku berniat jahat

WBOY
WBOYasal
2023-09-05 16:04:451429semak imbas

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

Cara menggunakan PHP untuk mencapai pengesahan manusia-komputer dan mencegah tingkah laku berniat jahat

Dengan perkembangan pesat Internet, isu keselamatan rangkaian telah menjadi semakin menonjol. Peningkatan dalam tingkah laku berniat jahat telah menyebabkan keperluan untuk mengambil langkah untuk melindungi keselamatan tapak web kami dan pengguna kami. Amalan biasa ialah menggunakan teknologi pengesahan manusia untuk membezakan antara pengguna sebenar dan bot. Artikel ini menerangkan cara menggunakan PHP untuk melaksanakan pengesahan mesin manusia dan mencegah tingkah laku berniat jahat serta menyediakan contoh kod yang sepadan.

  1. Gunakan kod pengesahan

Kod pengesahan ialah teknologi pengesahan mesin manusia asas yang memerlukan pengguna menyerahkan borang atau melakukan operasi tertentu Masukkan kod pengesahan untuk membuktikan ia pengguna sebenar dan bukan bot. Berikut ialah contoh kod yang menggunakan PHP untuk melaksanakan kod pengesahan mudah:

<?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);
?>

Kod di atas menjana rentetan kod pengesahan dengan panjang 6 dan menyimpannya ke sesi. Semasa menjana kod pengesahan, gambar kod pengesahan juga dilukis untuk memaparkan kod pengesahan kepada pengguna.

  1. Sahkan input pengguna

Apabila pengguna menyerahkan borang, adalah perlu untuk mengesahkan sama ada kod pengesahan yang dimasukkan oleh pengguna adalah betul. Berikut ialah contoh kod yang menggunakan PHP untuk mengesahkan kod pengesahan yang dimasukkan oleh pengguna:

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

Kod di atas mendapat kod pengesahan yang diserahkan oleh pengguna dan mendapat kod pengesahan yang betul daripada sesi tersebut. Kemudian bandingkan kedua-duanya jika sama, ini bermakna kod pengesahan telah dimasukkan dengan betul dan operasi seterusnya boleh dilakukan jika ia tidak sama, ini bermakna kod pengesahan telah dimasukkan dengan betul dan gesaan yang sepadan perlu diberikan.

  1. Sekatan Alamat IP

Selain menggunakan kod pengesahan, anda juga boleh menyekat akses berdasarkan alamat IP pengguna. Untuk tingkah laku berniat jahat, robot sering digunakan untuk menyerang, dan permintaan robot selalunya mempunyai alamat IP yang serupa. Oleh itu, kami boleh menyekat berdasarkan alamat IP pengguna Jika alamat IP yang sama kerap melawat tapak web dalam tempoh yang singkat, ia mungkin merupakan tingkah laku yang berniat jahat.

Berikut ialah contoh kod yang menggunakan PHP untuk menyekat akses berdasarkan alamat 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 {
  // 不允许访问,给出相应提示
}
?>

Kod di atas membandingkan alamat IP yang diakses sekarang dengan alamat IP yang terakhir diakses, dan selang masa untuk menentukan sama ada akses dibenarkan. Jika alamat IP yang sama diakses beberapa kali dalam tempoh yang singkat, ia mungkin tingkah laku berniat jahat.

Ringkasan

Artikel ini menerangkan cara menggunakan PHP untuk melaksanakan kaedah asas pengesahan mesin manusia dan mencegah tingkah laku berniat jahat, termasuk menggunakan kod pengesahan untuk pengesahan dan sekatan berdasarkan alamat IP . Kaedah ini boleh melindungi keselamatan tapak web dan pengguna dengan berkesan. Sudah tentu, terdapat teknik lain yang lebih maju dan kompleks yang boleh digunakan, tetapi kaedah di atas sudah agak biasa dan mudah. Saya harap pembaca akan memahami perkara ini dan dapat mengaplikasikannya dalam projek sebenar. Mempelajari dan meningkatkan kesedaran keselamatan rangkaian sendiri secara berterusan adalah bahagian penting dalam melindungi keselamatan tapak web dan pengguna.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk melaksanakan pengesahan mesin manusia dan mencegah tingkah laku berniat jahat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn