PHP Forma 表单 基于设备指纹的防重复提交

PHP Forma阿木 发布于 3 天前 2 次阅读


阿木博主一句话概括:基于设备指纹的PHP表单防重复提交技术实现

阿木博主为你简单介绍:
随着互联网技术的不断发展,网络安全问题日益突出。在PHP开发中,防止表单重复提交是一个常见的安全需求。本文将探讨如何利用设备指纹技术实现PHP表单的防重复提交,并通过实际代码示例进行详细说明。

一、

在Web应用中,表单重复提交是一个常见的安全漏洞。恶意用户可能会通过脚本或工具进行表单重复提交,导致服务器资源浪费,甚至可能对业务逻辑造成影响。为了解决这个问题,我们可以采用设备指纹技术,通过识别用户的设备信息来防止表单重复提交。

二、设备指纹技术简介

设备指纹(Device Fingerprinting)是一种通过分析用户设备的各种属性来识别用户的技术。这些属性包括但不限于:

1. 浏览器信息:用户使用的浏览器类型、版本、语言等。
2. 操作系统信息:用户使用的操作系统类型、版本等。
3. 硬件信息:用户设备的CPU型号、内存大小、屏幕分辨率等。
4. 网络信息:用户使用的网络类型、IP地址等。

通过收集这些信息,我们可以生成一个独特的设备指纹,用于识别用户。

三、PHP表单防重复提交实现

下面我们将通过一个简单的PHP表单示例,展示如何利用设备指纹技术实现防重复提交。

1. 创建表单页面

我们需要创建一个简单的HTML表单页面,如下所示:

html

设备指纹防重复提交示例

用户名:

2. 生成设备指纹

在PHP后端,我们需要收集用户的设备信息,并生成一个设备指纹。以下是一个简单的设备指纹生成函数:

```php
function generateDeviceFingerprint() {
$fingerprint = '';
$fingerprint .= $_SERVER['HTTP_USER_AGENT'] . '|';
$fingerprint .= $_SERVER['HTTP_ACCEPT_LANGUAGE'] . '|';
$fingerprint .= $_SERVER['HTTP_ACCEPT_ENCODING'] . '|';
$fingerprint .= $_SERVER['HTTP_ACCEPT'] . '|';
$fingerprint .= $_SERVER['HTTP_CONNECTION'] . '|';
$fingerprint .= $_SERVER['REMOTE_ADDR'] . '|';
$fingerprint .= $_SERVER['HTTP_REFERER'] . '|';
$fingerprint .= $_SERVER['HTTP_HOST'] . '|';
$fingerprint .= $_SERVER['SERVER_PORT'] . '|';
$fingerprint .= $_SERVER['REQUEST_URI'] . '|';
$fingerprint .= $_SERVER['REQUEST_METHOD'] . '|';
$fingerprint .= $_SERVER['HTTP_COOKIE'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_FOR'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_HOST'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PORT'] . '|';
$fingerprint .= $_SERVER['HTTP_X_FORWARDED_PROTO']