2017-06-28 83 views
0

如何保護PHP頁面的內容只與特定服務器的捲曲的訪問請求呢?應該不可能通過諸如「https://cms.domain.com/home」之類的請求在瀏覽器中獲取內容,但是如果我在特定服務器上創建Zend客戶端,則應該可以獲取內容。獲取PHP頁面內容使用Zend HTTP 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(); 

回答

0

如果你找到了一小段路,然後,我會說不!

唯一可靠的解決方案是使用OAuth2協議來限制您的API https://cms.domain.com/home。因爲Google,Facebook和Twitter使用OAuth2來處理他們的API。

因此,您需要創建一個RESTful應用程序。典型的RESTful Web服務將使用HTTP來執行四個CRUD(創建,檢索,更新和刪除)操作。這意味着您可以將這四種操作操作到您的api的不同端點,例如https://cms.domain.com/v2/api/oauth,https://cms.domain.com/v2/api/etc

當您使用Zend\Http\Client作爲客戶端來處理您的API則需要馮認證的服務器是服務器的OAuth2。在這裏你可以得到Brent Shaffer的OAuth2 Server Library for PHP

您還可以使用OAuth2 server from php league

另一種選擇是Zend Framework的Apigility,如果您需要啓動並運行OAuth 2.0 API,這非常有用。請查閱他們的文檔以供實施!

0

您可以檢查用戶代理HTTP請求。這裏是cURL User Agent的示例: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; 
     } 

    } 
} 

如果你願意,你可以添加一些類似的安全令牌來使限制更好。

+0

要完全誠實的,如果有什麼我的客戶或你的客戶,因爲我們知道對於API的端點。我們是否可以從任何地方進行卷曲請求以訪問該類型的端點?所以它對所有人開放,不是嗎? – unclexo

+0

是的,它是開放的。我的回答是基於這個問題。但是,我也建議使用安全令牌進行限制。 –