2017-06-28 1 views
0

PHPページのコンテンツを特定のサーバのカール要求でのみアクセスするにはどうすればよいですか? "https://cms.domain.com/home"のようなリクエストでブラウザにコンテンツを取得することはできませんが、特定のサーバにZend Clientを作成するとコンテンツを取得できるはずです。Zend Http ClientとCurlを持つ特定のサーバのPHPページコンテンツを取得する

リファラーなどを確認することはできますか?

$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を使用して4つのCRUD(Create、Retrieve、Update、およびDelete)操作を実行します。つまり、4つの操作を、例えばhttps://cms.domain.com/v2/api/oauthhttps://cms.domain.com/v2/api/etcのようなAPIの異なるエンドポイントに操作することができます。

あなたのAPIを処理するクライアントとしてZend\Http\Clientを使用しているので、認証のためにOAuth2サーバであるサーバーが必要です。ここでは、Brent ShafferによってOAuth2 Server Library for PHPを得ることができます。

OAuth2 server from php leagueを使用することもできます。

もう一つのオプションは、Zend FrameworkのApigilityです。これは、OAuth 2.0 APIを起動して実行する必要がある場合に非常に便利です。実装のための彼らの文書をチェックしてくださいしてください!

0

ユーザエージェントHTTPリクエストにチェックすることができます。ここでは、cURLユーザーエージェントの例:curl/7.37.0です。

したがって、ユーザエージェントがcurl/*でない場合、onBootstrap(MvcEvent $mvcEvent)で確認できます。リクエストが拒否されます。

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

はい、開いています。私の答えは質問に基づいています。しかし、私はまた、セキュリティトークンを使用して制限を行うよう提案しています。 –

関連する問題