Twilioのセキュリティー対策

Twilioを使って電話Webアプリケーションを構築しよう」の第 10回目の記事は、Twilioのセキュリティーに関する記事となります。

これまで、分かり易く伝えるため、セキュリティー対策などを行わないで、Twilioのコード説明のみを行ってきました。今回は1回目から 9回目までに作成したコードを実用性に近づけるため、セキュリティー対策用のコードを追加します。

Twilioの説明というよりは、WebとPHPの全般の話となりますが、リリースに向けて必ず必要となるコードにとなります。

 

 

これまでに作成したファイル

 

  • twilio_respons.xml
    ( ユーザーがTwilioにコールした際に最初に読み込まれるファイル )
  • twilio_respons.php
    ( ユーザーがキープッシュしたダイヤルを受け取って、電話を転送するファイル )
  • twilio_call_end.php
    ( 通話終了後に読み込まれる。ログなどを保存するためのファイル )
  • twilio-php
    ( REST API格納フォルダ。 )

 

ログファイル、音声ファイルの格納場所

 

これまで「/html/my_twilio」フォルダに直接ファイルを保存していましたが、Databaseへ書き込みを行うか、WWWからアクセスできない階層へ保存する必要があります。
私がこのブログで使用しているCPIのACE01であれば、「/html」と同階層に保存する必要があります。

今回は「/data」というフォルダを作成し、ログが保存するように変更します。

  1. 「twilio_call_end.php」を開きます。
  2. 音声ファイルの保存先を変更します。
    $path = './twilio_record_file.mp3';
     ↓
    $path = 'SERVER_ROOT_PATH/log/twilio_record_file.mp3';
    

    ※CPI、ACE01のSERVER_PATHは、「/usr/home/USER_ID」となります。
     

  3. ログファイルの保存先を変更します。
    $fp = fopen('./filename.txt', 'ab');
     ↓
    $fp = fopen('SERVER_ROOT_PATH/log/filename.txt', 'ab');
    ※CPI、ACE01のSERVER_PATHは、「/usr/home/USER_ID」となります。

 

クロスサイトスクリプティング対応(XSS対応)

 

POSTや、GET で受け取ったデータをそのままプログラム内部で使用するのは危険です。 POSTやGETのデータは基本全て、HTMLタグで使用される'<' などを ' &lt; ' に変換するようにしましょう。 twilio_respons.phpと、twilio_call_end.phpを開き、先頭行に以下のコードを追加します。

foreach ($_POST as $key => $value){
  $return_value = htmlspecialchars($value, ENT_QUOTES);
  $_POST[$key] = $return_value;
}

受け取ったPOSTデータをPHPの「htmlspecialchars」関数を使いHTMLのタグを無効化します。

 

twilioプログラムを設置した階層にアクセス制限をかける

 

今回は以前より使用している「my_twilio」フォルダ以下にアクセス制限( Basic認証 )をかけ、twilioからのアクセスのみを許可します。
アクセス制限( Basic認証 )については各社のサーバー設定に従ってください。CPIの場合はこちらに設定方法が記載されています。

今回は下記のようにIDと、パスワードを設定しました。
ID:test
PW:1234

パスワード設定後、「my_twilio」フォルダがIDとパスワードで保護されます。
Basic認証を行うと、下記のような認証が出力されます。

Basic認証をかけた後は、下記のルールに従い、ファイルの指定を行ってください。 詳しくはTwilioドキュメントを参照ください。

https://username:password@www.myserver.com/my_secure_document

※注意

ここではSSL通信を例としています。SSL通信を行う場合CPIの場合ですと別途SSLオプションの申し込みが必要です。
セキュリティー上、SSL通信を使うことが望ましいですが、通常のhttp通信にて認証を行うことも可能です。その場合は下記のように指定も可能です。
http://username:password@www.myserver.com/my_secure_document

 

  1. Twilioの管理画面にログインし、 「電話番号」→ Request URLを、上記のルールに従い変更を行います。

     
  2. twilio_respons.phpと、twilio_call_end.php内のactionで指定した、コードも、上記のルールに従い変更を行います。
    action="https://test:1234@shared-blog.kddi-web.com/my_twilio/twilio_respons.xml"

 

以上で、Twilioのセキュリティー対策は完了です。

次回は、Twilioを使って電話Webアプリケーションを構築しよう」の最終回となり、これまでのコードのおさらいと、繰り返し使われるコードをまとめて、終わりにさせていただきます。

 

ソースコード

 

ソースコードは、GitHubに公開いたしました。

 

 

 

関連タグ: 

この記事をシェアする:

Author
この記事を書いた人:阿部 正幸

KDDIウェブコミュニケーションズ
クラウドホスティング事業本部 エバンジェリスト

CPIスタッフブログ編集長。ACE01,SmartReleaseをリリース後、現職の「エバンジェリスト」として、web制作に関する様々なイベントに登場

Line@登録よろしくお願いします

Web制作に関する情報や、CPIノベルティのプレゼント、サーバーの無償提供などを定期的に発信しています。
ぜひ、登録ください。