【问题标题】:Slim framework restrict urlSlim 框架限制 url
【发布时间】:2016-04-26 04:39:52
【问题描述】:

我的 REST Base APi 位于 Slim 框架上。我需要帮助来限制一些只能在内部访问而不是公开的 URL。请问我怎样才能做到这一点。

/REST/api/v1/getusers -- 是公开的

/REST/api/v1/userinfo -- 我只想要本地访问的新 api,即网络上的其他系统可以访问但不能公开

【问题讨论】:

  • 也许保持简单,仅当访问/请求 IP 属于您期望从内部网络获得的 IP 范围时才响应?
  • 我认为这应该在服务器的配置文件中指定,而不是在php代码中
  • 你可以编写一个中间件来限制这些路由到特定的IP地址

标签: php slim


【解决方案1】:

首先添加rka-ip-address-middleware确定客户端的IP地址。您可以使用composer require akrabat/rka-ip-address-middleware 安装它:

$app->add(new RKA\Middleware\IpAddress());

现在,创建一个组并将所有受限路由放入其中。然后,您可以将中间件添加到组中,以确保在运行组中的任何路由之前允许客户端 IP 地址:

$app->group('', function () {
    $app->get('/REST/api/v1/userinfo', UserInfoAction::class);

    // other $app->get(), $app->post(), $app->put() etc actions here

})->add(function ($request, $response, $next) {
    // Only allow internal IP addresses
    $allowed = ['127.0.0.1', '192.168.0.1']; // or whatever
    $clientIp = $request->getAttribute('ip_address');

    // Is the client's IP address in the allowed list?
    if (!in_array($clientIp, $allowed)) {
        // Not allowed: return a 401 error
        return $response->withStatus(401);
    }

    // Allowed: continue to action
    return $next($request, $response);
});

【讨论】:

    【解决方案2】:

    我为此创建了一个中间件:它的名字是 Slim-Restrict-Route,你可以找到它here。它使用Respect/Validationrka-ip-address-middlewareIp Validator。

    可以这样注册:

    $app->add(new RKA\Middleware\IpAddress());
    
    $options = array(
      'ip' => '192.*.*.*'
    );
    
    $app->get('/api/myEndPoint',function ($req, $res, $args) {
      //Your amazing route code
    })->add(new \DavidePastore\Slim\RestrictRoute\RestrictRoute($options));
    

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2016-04-04
      • 2019-01-11
      • 2012-12-22
      • 1970-01-01
      相关资源
      最近更新 更多