返回

Hyperf框架篇之如何在项目中快速保护接口安全,防御羊毛党,打击薅羊毛行为!

后端

前言

前面分享了两篇关于Hyperf框架中RPC 同语言框架跨语言框架的调用,今天来点有意思,具有实战意义。

接口参数混淆

在项目中,我们会经常遇到接口参数被黑客恶意篡改的情况,导致接口出现问题,轻则造成数据泄露,重则可能造成资金损失。为了防止这种情况的发生,我们需要对接口参数进行混淆。

Hyperf框架提供了中间件机制,我们可以通过编写中间件来实现接口参数的混淆。

中间件实现

我们首先需要创建一个中间件类,该类需要继承Hyperf\HttpServer\Middleware\BaseMiddleware类。

namespace App\Middleware;

use Hyperf\HttpServer\Request;
use Hyperf\HttpServer\Response;

class ParamsObfuscationMiddleware extends BaseMiddleware
{
    public function process(Request $request, Response $response)
    {
        $params = $request->all();

        // 对参数进行混淆

        $request->replace($params);

        return $response;
    }
}

在中间件类中,我们首先获取了请求中的所有参数,然后对这些参数进行混淆。混淆的方法有很多种,这里我们使用简单的异或运算。

function obfuscate($value)
{
    $key = 'my-secret-key';

    $value = json_encode($value);

    $value = base64_encode($value);

    $value = strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9876543210-_');

    return $value;
}

在混淆完参数后,我们将混淆后的参数重新设置到请求中。这样,当接口被调用时,混淆后的参数就会被传递给控制器。

配置中间件

配置中间件有两种方式:

  1. config/middleware.php文件中配置
  2. 在路由注解中配置
// 在config/middleware.php文件中配置
config([
    'middlewares' => [
        'http' => [
            App\Middleware\ParamsObfuscationMiddleware::class,
        ],
    ],
]);

// 在路由注解中配置
#[Middleware(App\Middleware\ParamsObfuscationMiddleware::class)]
public function index()
{
    //
}

总结

通过在Hyperf框架中使用中间件,我们可以轻松地实现接口参数的混淆。这样,就可以有效地防止黑客恶意篡改接口参数,从而保护项目的接口安全。