開発者コンソール

ウェブアプリを保護する方法


ウェブアプリを保護する方法

インターネット上の通信は、傍受や悪意のある改ざんの対象になる可能性があります。Amazonアプリストアでは、申請するウェブアプリを保護するための対策を講じることをお勧めします。ウェブアプリの安全を確保するには、HTTPSの使用が最適です。

: 本ページで言及する開発資料・ツールは、Amazonではなく、サードパーティによって提供されています。ツールへのリンクをクリックすると、サードパーティのサイトに移動します。

HTTPSについて

HTTPはインターネット上で安全に通信するためのプロトコルです。クライアントとサーバー間のトラフィックをすべて暗号化することで、細心の注意を要する機密情報や個人情報(電話番号や住所など)を保護します。また、クライアントが接続対象のサーバーに確実に接続されるようにします。

HTTPSを使用する理由

HTTPSが構成されていないウェブアプリは、以下の攻撃に対して脆弱になります。

中間者攻撃

エンドユーザーとウェブアプリの間に入り込み、ウェブアプリと偽ってコンテンツを提供する攻撃です。この場合、HTTPSを使用してクライアントとサーバー間の通信の暗号化を強化し、クライアント側で認証を要求することが一般的な防御策となります。

スニッフィングと傍受

ネットワークのトラフィックを傍受または記録することで、パスワードやユーザーIDなどの個人情報を盗み取る攻撃です。安全なHTTPS通信を使用して情報を暗号化することで、個人情報の漏洩を防ぐことができます。

Amazonウェブアプリのセキュリティ

 AmazonではすべてのアプリでSSLの使用を推奨していますが、アプリ内課金(IAP)を使用または認証を要求するウェブページでは、SSL経由でホストすることを必須としています。

パーミッションのセキュリティ要件

Amazonアプリストアでは、アプリ内の不正なトランザクションを防止するために、Amazon IAP APIを使用するページの安全性確保が求められます。アプリの安全性を確保するため、IAPトランザクションをトリガーするページと関連するすべてのリソースが、必ずSSL/HTTPSを使用して提供されるようにしてください。これにより、アプリがAmazon IAP APIと通信する際に受ける可能性のある中間者攻撃を防ぐことができます。

リンクされたリソース

ユーザーパーミッションの使用時にSSL経由でアプリのページをホストする必要がある場合は、リンクされたリソースもすべてSSL経由でホストすることをお勧めします。

IAPを使用するアプリを申請する前に、IAPトランザクションをトリガーするページで使用されるサードパーティコンポーネントの安全性確保も、必ず確認してください。

広告ネットワークなどの一般的なコンポーネントをチェックするようにしてください。広告ネットワークは安全性が確保されていないiframeを作成する可能性があり、これにより例外がスローされてAmazon IAP APIが失敗する原因となります。ソーシャルメディアの制御も、意図せず安全でないコンテンツを提供する可能性があり、この場合も同様にAmazon IAP APIへのアクセスが制限されます。

アプリ内課金(IAP)のSSLエラーに対する例外対応

前述のセキュリティ要件を満たさないページによってIAPの呼び出しがトリガーされると、Amazonフレームワークによってグローバルな例外がスローされます。この例外は、window.onerrorメソッドにハンドラーを指定することでキャッチできます。

window.onerror = function(errorMessage, fileName, lineNumber)
{
 alert('Error: ' + errorMessage);
}

また、このエラーは「adb logcat」でも確認できます。

E WebConsole-ERROR: Uncaught WebAppBridgeError: Invalid use of IAP, calling page must be fully secure.

アプリにおけるこの例外は、エンドユーザーにエラーを通知することで適切に対応してください。これは実質的に致命的なエラーであるため、Amazonアプリストアにアプリを申請する前にIAPトランザクションをテストすることが重要です。

HTTPSを実装する方法

HTTPSを実装すると、一般的に機密性とサーバー認証の両方を確保できます。これは次のことを意味します。

  • クライアントが接続対象のサーバーと確実に通信できるようになる。
  • クライアントとサーバー間の通信が暗号化され、他者に傍受されることがなくなる。
  • クライアントとサーバー側の両方で、メッセージが転送中に改変されなかったことが保証される。

Amazon S3にてHTTPSを使用するシンプルなウェブアプリのデプロイと構成

既存のワイルドカード証明書を使用することで、Amazon S3でHTTPSを簡単に設定できます。手順は以下のとおりです。

  • S3コンソールにログインする。
  • アプリのログを記録するバケットを作成する。このバケットは、アプリをホストするバケットと同じリージョンに存在する必要があり、複数のアプリで共有可能です。
  • リージョンを選択し、アプリのコードをホストするバケットを作成する。バケット名は、 AWSのバケットの制約と制限に従って、DNSに準拠する必要があります。
  • アプリをホストするバケットの作成時にバケットのログ記録を有効にし、対象のバケットとアプリのプレフィックス(省略可能)を指定する。
  • アプリをホストするバケットにウェブアプリのファイルをアップロードする。
  • バケットの [Properties] タブを選択し、[Static Website Hosting][Enable Website Hosting] をクリックしてインデックスドキュメントを指定し、[Save] をクリックする。
  • バケットの [Permissions] タブに移動し、アプリが世界中で読み取り可能で、SSL接続によってのみ提供可能であることを設定したバケットポリシーを追加する。
  • バケットポリシーの例は以下のとおりです。

    {
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::/*",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": true
                }
            }
        }
    ]
    }
    
  • インデックスドキュメントオブジェクトをクリックし、オブジェクトの [Properties] タブからURLをコピーする。
  • このURLを使用してウェブアプリを提供する。

主なホスティングプロバイダーとのHTTPSの設定

HTTPSを設定するための汎用手順

上記以外のプロバイダーを使用する場合、ウェブアプリにHTTPSを設定する一般的なガイドとして、以下の手順を使用してください。