メニュー

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Twilioの着信リクエストを検証してPHP / Lumenアプリケーションを安全にする

In this guide we’ll cover how to secure your Lumen application by validating incoming requests to your Twilio webhooks are, in fact, from Twilio.

With a few lines of code we’ll write a custom middleware for our Lumen app that uses the Twilio PHP SDK’s RequestValidator utility. We can then use that middleware on our Lumen routes which accept Twilio webhooks to confirm that incoming requests genuinely originated from Twilio.

Let’s get started!

Create custom middleware

Twilio PHP SDKには受信リクエストに使用できる RequestValidator ユーティリティーが含まれています。

各Lumenルートにリクエスト検証コードを含めることができますが、これはLumenミドルウェアを記述する絶好の機会です。 こうすれば、Twilioからの受信リクエストを受け付ける全ルートで検証ロジックを再利用できます。

To validate an incoming request genuinely originated from Twilio, we need to call the $requestValidator->validate(...). That method will return true if the request is valid or false if it isn’t. Our middleware then either continues processing the view or returns a 403 HTTP response for unauthorized requests.

Loading Code Sample...
      
      
          
          
          
          
        
      Twilio SDKの 'RequestValidator' を使用してWebhookリクエストを検証する

      Lumenミドルウェアを作成してリクエストを検証する

      Twilio SDKの 'RequestValidator' を使用してWebhookリクエストを検証する

      Webhookにリクエスト検証ミドルウェアを適用する

      カスタムのTwilioリクエスト検証ミドルウェアを、Twilio のWebhookで使用される全Lumenルートに適用します。

      ルートでミドルウェアを使用するには、まずミドルウェアをRegister Middlewareセクションのbootstrap/app.phpに追加することが必要です。

      $app->routeMiddleware([
        'TwilioRequestValidator' => App\Http\Middleware\TwilioRequestValidator::class,
      ]);
      

      続いて、下記のようにミドルウェアを各ルートに追加することが必要です。

      Loading Code Sample...
          
          
              
              
              
              
            
          Creates a route for /voice and /message to handle the respective webhooks.

          Lumenルートを作成し、Twilioリクエストを処理する

          Creates a route for /voice and /message to handle the respective webhooks.

          実際にTwilioのWebhookを使用できるよう、ローカルの開発環境にトンネルを使用する

          If your Twilio webhook URLs start with https:// instead of http://, your request validator may fail locally when you use ngrok or in production if your stack terminates SSL connections upstream from your app. This is because the request URL that your Express application sees does not match the URL Twilio used to reach your application.

          ngrokでローカル開発向けにこれを修正するには、ngrok https 3000ではなくngrok http 3000を使用し、Webhookへのリクエストを受け入れます。

          Disable request validation during testing

          Lumenルート用にテストを記述した場合、Twilioリクエスト検証ミドルウェアを使用するルートでテストに失敗する可能性があります。 これらルートに送信するテストスイートのいかなるリクエストも、ミドルウェアの検証チェックに失敗します。

          To fix this problem we recommend adding an extra check in your middleware, like shown here, telling it to only reject incoming requests if your app is running in production.

          Loading Code Sample...
              
              
                  
                  
                  
                  
                
              Use `APP_ENV` environment variable to disable request validation.

              Disable Twilio request validation when testing

              Use `APP_ENV` environment variable to disable request validation.

              次は?

              開発者のTwilio Webhookへのリクエストの検証はTwilioアプリケーションをセキュアにするのには素晴らしい第一歩です。 アプリケーションの保護についてのさらなるアドバイスについては、セキュリティードキュメントの全部、特に対詐欺行為対策開発者ガイドをお読みいただくことをお勧めします。

              PHPの開発環境のセットアップについて詳しく学ぶ。

              Lumenアプリケーションをセキュアにする方法について学ぶには、一般的にはLumen公式ドキュメントのセキュリティ考慮事項についてのページをご覧ください。

              Jose Oliveros Agustin Camino Kevin Whinnery Kat King Andrew Baker

              ヘルプが必要ですか?

              We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.

              Loading Code Sample...