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

1. 人机验证技术介绍

在网络安全领域,人机验证技术是一种常见的防止机器人或者恶意软件进行不当操作的方法。在网站登录、注册、留言等环节,为了保证服务的正常和安全,通常需要启用人机验证技术。下面我们就来介绍一下PHP中使用人机验证技术的实现方法。

2. 实现人机验证的方案

2.1 使用图形验证码

图形验证码是最常见、最经典、最基础的人机验证技术。具体实现过程是:用户访问页面时,服务端生成随机字符串并将其存放在session中;客户端展示一个带有验证码图片的表单,并要求用户输入验证码;当用户提交表单时,服务端将用户输入的验证码与session中存储的验证码进行比较,如果相同则通过验证。

下面是使用PHP实现图形验证码的具体代码:

// 生成随机字符串

$code = uniqid('', true);

// 将随机字符串存放在session中

session_start();

$_SESSION['code'] = $code;

// 创建图像

$im = imagecreatetruecolor(100, 30);

// 分配颜色

$bgColor = imagecolorallocate($im, 255, 255, 255);

$textColor = imagecolorallocate($im, 0, 0, 0);

// 填充背景色

imagefill($im, 0, 0, $bgColor);

// 将字符串画入图像中

imagestring($im, 5, 5, 5, $code, $textColor);

// 输出图像

header('Content-type:image/png');

imagepng($im);

// 销毁图像

imagedestroy($im);

使用上述代码生成的验证码图片如下所示:

![验证码图片](https://gitee.com/coder_starter/picture/raw/master/2022/10/13/code.png)

2.2 使用滑动验证码

滑动验证码是一种新型的人机验证技术,相对于传统的图形验证码,滑动验证码更加友好、简单易用。它的实现原理是:在网页中嵌入一个验证码图片和一个滑块,当用户拖动滑块将其移到正确位置后,服务端验证将滑块的位置信息与验证码图片进行比较,如果匹配成功则通过验证。

下面是使用PHP实现滑动验证码的具体代码:

// 生成随机字符串

$code = uniqid('', true);

// 将随机字符串存放在session中

session_start();

$_SESSION['code'] = $code;

// 创建图像

$im = imagecreatetruecolor(300, 150);

// 分配颜色

$bgColor = imagecolorallocate($im, 255, 255, 255);

$lineColor = imagecolorallocate($im, 0, 0, 0);

$textColor = imagecolorallocate($im, 0, 0, 0);

// 填充背景色

imagefill($im, 0, 0, $bgColor);

// 画干扰线

for ($i = 0; $i < 10; $i++) {

imageline($im, mt_rand(0, 300), mt_rand(0, 150), mt_rand(0, 300), mt_rand(0, 150), $lineColor);

}

// 将字符串画入图像中

imagestring($im, 5, 5, 5, $code, $textColor);

// 输出图像

header('Content-type:image/png');

imagepng($im);

// 销毁图像

imagedestroy($im);

使用上述代码生成的滑动验证码图片如下所示:

除了以上两种方案,还有很多其他的人机验证技术,如数学验证码、问答验证等。这里不再做赘述。

3. 防止恶意行为的方法

除了使用人机验证技术外,还有一些其他的方法可以用来防止恶意行为。下面我们来介绍一下:

3.1 禁止IP

如果有某个IP地址不断地访问你的网站,并且行为异常,你可以将其IP地址锁定或者禁止访问。这样可以避免恶意行为的继续发生。

以下是禁止IP的具体代码:

// 获取客户端IP地址

$ip = $_SERVER['REMOTE_ADDR'];

// 判断IP地址是否在黑名单中

$blackList = ['192.168.0.1', '192.168.0.2', '192.168.0.3'];

if (in_array($ip, $blackList)) {

die('IP地址已被禁止');

}

3.2 设置访问频率限制

如果有用户频繁访问你的网站,也可能会导致异常行为的发生。为了避免这种情况的发生,我们可以设置一个访问频率的限制。当用户在规定时间内访问次数过多时,系统就会自动限制其访问。

以下是设置访问限制的具体代码:

// 限制访问频率为5秒一次

$limit = 5;

// 获取客户端IP地址

$ip = $_SERVER['REMOTE_ADDR'];

// 判断当前IP地址是否已经达到了访问次数限制

if (isset($_SESSION[$ip]) && time() - $_SESSION[$ip]['time'] < $limit) {

$_SESSION[$ip]['count']++;

} else {

// 如果超过了访问次数限制,则封禁IP

$_SESSION[$ip]['count'] = 1;

$_SESSION[$ip]['time'] = time();

}

if ($_SESSION[$ip]['count'] > 10) {

die('访问过于频繁,请稍后再试');

}

4. 总结

通过使用人机验证技术和其他防止恶意行为的方法,可以有效地保护网站的安全,保护用户的隐私。PHP作为一种流行的服务器端编程语言,具有很强的代码可读性和易理解性,更加适用于开发各种功能强大的网络应用程序。我们在今后的实践中,可以结合实际场景,采用不同的防护手段,保障网站运营的正常和安全。

后端开发标签