繁体   English   中英

仅使用Zend \\ Http \\ Client和Curl从特定服务器获取PHP页面内容

[英]Get PHP page content only from specific server with Zend\Http\Client and Curl

我怎样才能确保php页面的内容仅在特定服务器的curl请求下才能访问? 可能无法通过诸如“ https://cms.domain.com/home ”之类的请求在浏览器中获取内容,但是如果我在特定服务器上创建Zend Client,则应该可以获取内容。

是否可以检查引荐来源或其他内容?

$adapter = new Zend\Http\Client\Adapter\Curl();
$client = new Zend\Http\Client();
$client->setAdapter($adapter);

$client->setMethod(\Zend\Http\Request::METHOD_GET)
    ->setUri('https://cms.domain.com/home');

$response = $this->client->send();

这不是那么简单,因为根据HTTP协议,请求根据定义独立于其他请求。

HTTP_REFERER易于伪造,并不总是存在。

您可以在以下位置找到更多信息:

如何检查来自同一服务器还是不同服务器的请求?

如果您找到一个简短的方法,那么我会拒绝!

唯一且唯一可靠的解决方案是使用OAuth2协议来限制您的API https://cms.domain.com/home 因为Google,Facebook,Twitter使用OAuth2作为其API。

因此,您需要创建一个RESTful应用程序。 典型的RESTful Web服务将使用HTTP来执行四个CRUD(创建,检索,更新和删除)操作。 这意味着你可以操作这些四个运算的API等不同的端点https://cms.domain.com/v2/api/oauthhttps://cms.domain.com/v2/api/etc例如。

当您使用Zend\\Http\\Client作为客户端来处理您的api时,则不再需要用于身份验证的服务器,即OAuth2服务器。 在这里,您可以通过Brent Shaffer获得用于PHPOAuth2服务器库

您还可以使用php League中的OAuth2服务器

另一个选项是Zend Framework的Apigility ,如果您需要启动并运行OAuth 2.0 API,这将非常有用。 请查看他们的文档以获取实现!

您可以在HTTP Request上检查User Agent 这里是cURL用户代理的示例: curl/7.37.0

因此,您可以在onBootstrap(MvcEvent $mvcEvent)处检查用户代理不是curl/* ,请求将被拒绝。

class Module
{
    public function onBootstrap(MvcEvent $event)
    {
        $headers = $event->getRequest()->getHeaders();
        $userAgent = $headers->get('User-Agent');
        if (is_null($userAgent) || preg_match("/^curl\/.*/", $userAgent->getFieldValue() !== 1) {
            $response = $this->getResponse();
            $response->setStatusCode(400);  // give bad request status
            $response->sendHeaders();
            $stopCallBack = function($mvcEvent) use ($response){
                $mvcEvent->stopPropagation();
                return $response;
            };
            //Attach the "break" as a listener with a high priority
            $event->getApplication()->getEventManager()->attach(MvcEvent::EVENT_ROUTE, $stopCallBack,-10000);
            return $response;
        }

    }
}

如果需要,可以添加一些类似的安全令牌以使限制更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM