メニュー

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の着信リクエストを検証してFlaskアプリケーションを安全にする

In this guide we’ll cover how to secure your Flask 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 decorator for our Flask app that uses the Twilio Python SDK’s validator utility. We can then use that decorator on our Flask views which accept Twilio webhooks to confirm that incoming requests genuinely originated from Twilio.

Let’s get started!

Create a custom decorator

The Twilio Python SDK includes a RequestValidator class we can use to validate incoming requests.

Flaskビューにリクエスト検証コードを含めることができますが、これはPythonデコレーターを記述する絶好の機会です。 こうすれば、Twilioからの受信リクエストを受け付ける全ルートで検証ロジックを再利用できます。

Loading Code Sample...
      
      
          
          
          
          
        
      本カスタムデコレーターで、Flaskビューへの受信リクエストが本物かどうか確認します。

      Twilioリクエスト検証用のFlaskアプリケーション向けカスタムデコレーター

      本カスタムデコレーターで、Flaskビューへの受信リクエストが本物かどうか確認します。

      To validate an incoming request genuinely originated from Twilio, we first need to create an instance of the RequestValidator class using our Twilio auth token. After that we call its validate method, passing in the request’s URL, payload, and the value of the request's X-TWILIO-SIGNATURE header.

      That method will return True if the request is valid or False if it isn’t. Our decorator then either continues processing the view or returns a 403 HTTP response for inauthentic requests.

      Use the Decorator with our Twilio Webhooks

      これで、Twilioからの受信リクエストを処理するFlaskアプリケーション内のいかなるビューへもデコレーターを適用する準備が整いました。

      Loading Code Sample...
          
          
              
              
              
              
            
          Apply a custom Twilio request validation decorator to a Flask view used for Twilio webhooks.

          Apply the request validation decorator to a Flask view

          Apply a custom Twilio request validation decorator to a Flask view used for Twilio webhooks.

          To use the decorator with an existing view, just put @validate_twilio_request above the view’s definition. In this sample application we use our decorator with two views: one that handles incoming phone calls and another that handles incoming text messages.

          メモ: Ngrokを使用したり、本番環境でお使いのスタックでSSL接続がアプリケーションより上流で終端している場合、TwilioのWebhook URLがhttp://ではなくhttps://から始まる場合、リクエストばりデーターがローカルで失敗する可能性があります。 これはFlaskアプリケーションで確認できるリクエストURLが、Twilioがアプリケーションに到達するために使用するURLと一致していないことが原因です。

          To fix this for local development with Ngrok, use http:// for your webook instead of https://. To fix this in your production app, your decorator will need to reconstruct the request's original URL using request headers like X-Original-Host and X-Forwarded-Proto, if available.

          Disable Request Validation During Resting

          もしFlaskビュー用のテストを記述している場合、Twilioリクエスト検証デコレーターを使用しているビューでテストは失敗するでしょう。 これらビューに送信するテストスイートのいかなるリクエストも、ミドルウェアの検証チェックに失敗します。

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

          Loading Code Sample...
              
              
                  
                  
                  
                  
                
              Flaskビューをテストする際、カスタムFlaskデコレーターの本バージョンを使用してください。

              テストに便利な、改良済みFlaskリクエスト検証デコレーター

              Flaskビューをテストする際、カスタムFlaskデコレーターの本バージョンを使用してください。

              次は?

              Validating requests to your Twilio webhooks is a great first step for securing your Twilio application. We recommend reading over our full security documentation for more advice on protecting your app, and the Anti-Fraud Developer’s Guide in particular.

              To learn more about securing your Flask application in general, check out the security considerations page in the official Flask docs.

              Andrew Baker Paul Kamp  Kevin Whinnery Kat King

              ヘルプが必要ですか?

              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...