Twilioの着信リクエストを検証してSinatraアプリケーションを安全にする
このガイドでは、開発者のTwilio Webhookへの受信リクエストが本当にTwilioからのものか検証することで、Sinatraアプリケーションをセキュアにする方法を取り上げます。
数行のコードでTwilio Ruby SDKの検証ユーティリティーを使用するSinatraアプリケーション用のカスタム検証を記述します。 そうすればこのバリデーターをTwilioのWebhookを受け入れるSinatraアプリケーション上で使用し、受信リクエストが確かにTwilioが発信源となっているか確認します。
Let’s get started!
開始ポイント
Ruby用の開発環境のセットアップについてヘルプが必要な場合は、セットアップドキュメントをご確認ください。
Sinatraアプリケーションを実装している基本的なコードサンプルから構築をはじめます。
次のようにサンプルコードを実行する:
$ ruby index.rb
このシンプルなアプリケーションは任意の「/」へのリクエストに対して、検証を一切行わずにTwiMLを返します:
$ curl -XPOST http://localhost:4567 <?xml version="1.0" encoding="UTF-8"?> <Response><Message>Hello World</Message></Response>
リクエスト検証を追加する
Sinatraアプリケーションにリクエスト検証を追加するには認証トークンが必要です。
Twilio Consoleから取得できるTwilio API用の認証トークンが必要になります。 このトークンは新しい環境変数にエクスポートすることで設定されます:
$ export TWILIO_AUTH_TOKEN=" TWILIO_AUTH_TOKEN_HERE "
Rackミドルウェアを通じてリクエスト検証を使用するには、下記の行を追加することが必要です:
use Rack::TwilioWebhookAuthentication, ENV['TWILIO_AUTH_TOKEN'], '/'
概要とテスト
この時点でサンプルは発展し、認証トークンを使用することでTwilioリクエストにに対するセキュアな認証が確保されました。
前項のcurl
の手順を繰り返すことで、認証が機能していることをテストできます:
$ curl -XPOST http://localhost:4567 Twilio Request Validation Failed.
カスタム検証ロジックで、Sinatraアプリケーションへの受信リクエストが本物かどうか確認します。 もしリクエストが有効な場合は<?xml version="1.0" encoding="UTF-8"?> <Response><Message>Hello World</Message></Response>
を、そうでない場合はTwilio Request Validation Failed.
を返します。 このロジックではリクエストの処理を継続するか、無効なリクエストの試行に対しては403 HTTPレスポンスを返します。
次は?
開発者のTwilio Webhookへのリクエストの検証はTwilioアプリケーションをセキュアにするのには素晴らしい第一歩です。 アプリケーションの保護についてのさらなるアドバイスについては、セキュリティードキュメントの全部、特に対詐欺行為対策開発者ガイドをお読みいただくことをお勧めします。
一般的なSinatraアプリケーションのセキュリティーを向上させる方法の詳細については、公式Sinatraドキュメント内のセキュリティー検討事項のページを参照するか、公式RackドキュメントとTwilio Ruby SDKをご覧いただけます。
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。