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.
Webhookにリクエスト検証ミドルウェアを適用する
カスタムのTwilioリクエスト検証ミドルウェアを、Twilio のWebhookで使用される全Lumenルートに適用します。
ルートでミドルウェアを使用するには、まずミドルウェアをRegister Middlewareセクションのbootstrap/app.php
に追加することが必要です。
$app->routeMiddleware([ 'TwilioRequestValidator' => App\Http\Middleware\TwilioRequestValidator::class, ]);
続いて、下記のようにミドルウェアを各ルートに追加することが必要です。
実際に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.
次は?
開発者のTwilio Webhookへのリクエストの検証はTwilioアプリケーションをセキュアにするのには素晴らしい第一歩です。 アプリケーションの保護についてのさらなるアドバイスについては、セキュリティードキュメントの全部、特に対詐欺行為対策開発者ガイドをお読みいただくことをお勧めします。
PHPの開発環境のセットアップについて詳しく学ぶ。
Lumenアプリケーションをセキュアにする方法について学ぶには、一般的にはLumen公式ドキュメントのセキュリティ考慮事項についてのページをご覧ください。
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。