「Twilioを使って電話Webアプリケーションを構築しよう」の第 10回目の記事は、Twilioのセキュリティーに関する記事となります。
これまで、分かり易く伝えるため、セキュリティー対策などを行わないで、Twilioのコード説明のみを行ってきました。今回は1回目から 9回目までに作成したコードを実用性に近づけるため、セキュリティー対策用のコードを追加します。
Twilioの説明というよりは、WebとPHPの全般の話となりますが、リリースに向けて必ず必要となるコードにとなります。
「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供
これまでに作成したファイル
- twilio_respons.xml
( ユーザーがTwilioにコールした際に最初に読み込まれるファイル ) - twilio_respons.php
( ユーザーがキープッシュしたダイヤルを受け取って、電話を転送するファイル ) - twilio_call_end.php
( 通話終了後に読み込まれる。ログなどを保存するためのファイル ) - twilio-php
( REST API格納フォルダ。 )
ログファイル、音声ファイルの格納場所
これまで「/html/my_twilio」フォルダに直接ファイルを保存していましたが、Databaseへ書き込みを行うか、WWWからアクセスできない階層へ保存する必要があります。
私がこのブログで使用しているCPIのACE01であれば、「/html」と同階層に保存する必要があります。
今回は「/data」というフォルダを作成し、ログが保存するように変更します。
- 「twilio_call_end.php」を開きます。
- 音声ファイルの保存先を変更します。
$path = './twilio_record_file.mp3'; ↓ $path = 'SERVER_ROOT_PATH/log/twilio_record_file.mp3';
※CPI、ACE01のSERVER_PATHは、「/usr/home/USER_ID」となります。
- ログファイルの保存先を変更します。
$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タグで使用される'<' などを ' < ' に変換するようにしましょう。 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
- Twilioの管理画面にログインし、 「電話番号」→ Request URLを、上記のルールに従い変更を行います。
- 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に公開いたしました。