メニュー

Expand
ページを評価:

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

このガイドでは、開発者のTwilio Webhookへの受信リクエストが本当にTwilioからのものか検証することで、Servletアプリケーションをセキュアにする方法を取り上げます。

数行のコードでTwilio Java SDKの検証ユーティリティーを使用するServletアプリケーション用のカスタムフィルターを記述します。 そうすればこのフィルターがTwilioのWebhookを受け入れる関連パス上で呼び出され、受信リクエストが確かにTwilioが発信源となっているか確認します。

Let’s get started!

カスタムフィルターを作成する

Twilio Java SDKには受信リクエストに使用できるRequestValidatorクラスが含まれています。

We could include our request validation code as part of our Servlet, but this is a perfect opportunity to write a Java filter. This way we can reuse our validation logic across all our Servlets which accept incoming requests from Twilio.

        
        
        
        
        このフィルターでServletへの受信リクエストが本物かどうか確認する

        Servletフィルターを使用してTwilioのリクエストを検証する

        このフィルターでServletへの受信リクエストが本物かどうか確認する

        サーブレットの実行前にdoFilterメソッドが実行されます。 これでリクエストが本当にTwilioからのものか検証して、もしそうでない場合にServletへの到達を防ぐことができます。 まず、関連するリクエストのメタデーター(URL、クエリー文字列、およびX-TWILIO-SIGNATUREヘッダー)とPOSTパラメーターを収集します。 それからこのデーターを、検証が成功したか否かを返すRequestValidatorvalidateメソッドに渡します。

        検証が成功すると、他のフィルター、そして最終的にServeletが実行されます。 失敗した場合はリクエストを停止し、403 - Forbiddenレスポンスをリクエストした側(この場合はTwilio)に送信します。

        TwilioのWebhookにフィルターを使用する

        これで、Twilioからの受信リクエストを処理するServletアプリケーション内のいかなるパスへもフィルターを適用する準備が整いました。

              
              
              
              
              TwilioのWebhookを使用して、カスタムTwilioリクエストフィルターにServletのセットに適用します。

              リクエスト検証フィルターをServletのセットに適用します。

              TwilioのWebhookを使用して、カスタムTwilioリクエストフィルターにServletのセットに適用します。

              フィルターを使用するには、<filter><filter-mapping>セクションをweb.xmlに追加してください。 実際のServletにはいかなる変更も必要ありません。

              <filter>セクションでは、web.xml中で使用される名前を与えます。 この場合はrequestValidatorFilterです。 また、その完全修飾名を使用してフィルタークラスに指定します。

              <filter-mapping>セクションでは、リクエストの受信時にコンテナーで何のパスが使用されるか、TwilioRequestFilterを使用して構成されます。 ここではそれらのパスの選択にURLパターンを使用し、このセクションで<url-pattern>が使用できます。 双方のServletにフィルターを適用したいため、共通のルートパスを使用します。

              メモ: 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 filter 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 testing

              開発したServelet用のテストを記述した場合、それらのテストはTwilioリクエスト検証フィルターの使用箇所で失敗する可能性があります。 テストスイートがこれらServeletに送信するいかなるリクエストも、フィルターの検証確認に失敗します。

              この問題を修正するには、フィルターに追加のチェックを加えると良いでしょう。 そうすることで本番環境での使用において着信リクエストのみを拒否するするよう指示することができます。

                    
                    
                    
                    
                    Servletのテスト用に、カスタムフィルターの本バージョンを使用します。

                    テストに便利な、機能強化されたリクエスト検証フィルター

                    Servletのテスト用に、カスタムフィルターの本バージョンを使用します。

                    次は?

                    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.

                    Serveletアプリケーションのセキュリティーを高める一般的な方法について学ぶには、Oracleの公式ドキュメント中の「セキュリティ検討事項」ページを参照してください。

                    Hector Ortega Kevin Whinnery Kat King Andrew Baker Brian Partridge
                    ページを評価:

                    ヘルプが必要ですか?

                    誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。

                          
                          
                          

                          フィードバックくださりありがとうございます!

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

                          Sending your feedback...
                          🎉 Thank you for your feedback!
                          Something went wrong. Please try again.

                          Thanks for your feedback!

                          Refer us and get $10 in 3 simple steps!

                          ステップ1

                          Get link

                          Get a free personal referral link here

                          ステップ2:

                          Give $10

                          Your user signs up and upgrade using link

                          ステップ3

                          Get $10

                          1,250 free SMSes
                          OR 1,000 free voice mins
                          OR 12,000 chats
                          OR more