簡體   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