utopia-php/abuse

一个简单的滥用库,用于管理应用程序的使用限制


README

Build Status Total Downloads Discord

Utopia 框架的滥用库是一个简单轻量级的库,用于管理应用程序的使用限制。这个库的目标是尽可能简单,易于学习和使用。这个库由Appwrite 团队维护。

尽管这个库是Utopia 框架项目的一部分,但它不依赖任何其他库,可以独立于任何其他 PHP 项目或框架使用。

入门指南

使用 composer 安装

composer require utopia-php/abuse

时间限制滥用

时间限制滥用允许每个键(操作)在给定的时间范围内执行[X]次。此适配器使用 MySQL / MariaDB 存储使用尝试。在使用它之前,请创建表模式,如本存储库中所述(./data/schema.sql)

<?php

require_once __DIR__ . '/../../vendor/autoload.php';

use Utopia\Abuse\Abuse;
use Utopia\Abuse\Adapters\TimeLimit;
use Utopia\Cache\Adapter\None as NoCache;
use Utopia\Cache\Cache;
use Utopia\Database\Adapter\MySQL;
use Utopia\Database\Database;

$dbHost = '127.0.0.1';
$dbUser = 'travis';
$dbPass = '';
$dbPort = '3306';

$pdo = new PDO("mysql:host={$dbHost};port={$dbPort};charset=utf8mb4", $dbUser, $dbPass, [
    PDO::ATTR_TIMEOUT => 3, // Seconds
    PDO::ATTR_PERSISTENT => true,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => true,
    PDO::ATTR_STRINGIFY_FETCHES => true,
]);

$db = new Database(new MySQL($pdo), new Cache(new NoCache()));
$db->setNamespace('namespace');

// Limit login attempts to 10 time in 5 minutes time frame
$adapter    = new TimeLimit('login-attempt-from-{{ip}}', 10, (60 * 5), $db);

$adapter->setup(); //setup database as required
$adapter->setParam('{{ip}}', '127.0.0.1')
;

$abuse      = new Abuse($adapter);

// Use vars to resolve adapter key

if($abuse->check()) {
    throw new Exception('Service was abused!'); // throw error and return X-Rate limit headers here
}

ReCaptcha 滥用

ReCaptcha 滥用控制器使用 Google ReCaptcha 服务来检测服务是否被机器人滥用。要使用此适配器,您需要从 Google ReCaptcha 服务的管理控制台创建 API 密钥。

<?php

require_once __DIR__ . '/../../vendor/autoload.php';

use Utopia\Abuse\Abuse;
use Utopia\Abuse\Adapters\ReCaptcha;

// Limit login attempts to 10 time in 5 minutes time frame
$adapter    = new ReCaptcha('secret-api-key', $_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
$abuse      = new Abuse($adapter);

if($abuse->check()) {
    throw new Exception('Service was abused!'); // throw error and return X-Rate limit headers here
}

注意:上面的代码仅用于示例目的。在将用户输入用于您的代码之前,始终建议验证用户输入。如果您正在使用负载均衡器或任何代理服务器,您可能需要从 HTTP_X_FORWARDED_FOR 标头中获取用户 IP。

系统要求

Utopia 框架需要 PHP 8.0 或更高版本。我们建议在可能的情况下始终使用最新的 PHP 版本。

版权和许可

MIT 许可证 (MIT) https://open-source.org.cn/licenses/mit-license.php