HTTP/HTTPS

代表的な通信プロトコルとして、HTTP/HTTPSがありますが、
HTTPは現在は安全性が低いため基本的に使用は非推奨になっています。
HTTPはリクエストやレスポンスの内容が暗号化されないため、下記のようなリスクがあります。

【リスク】
・悪意のある攻撃者による個人情報の窃取
・サーバーのなりすまし
・通信する値の改ざん

【対策】
通信を暗号化するHTTPSを利用する。

HTTPSは、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)プロトコルを経由して
安全な接続を行なった上でHTTPによる通信を行います。
HTTPSを使うことで、HTTPのリクエストやレスポンスの内容は暗号化されます。
ですので、悪意ある攻撃者から情報を守ることができます。

iOSの場合、
iOS 9からデフォルトで有効になっているApp Transport Security(ATS)によって、
『基本的にHTTPは使用禁止で、HTTPSを使用するように』
というアップル側の方針が示されています。
API通信や外部サイトを表示するアプリについては、
HTTPSで統一するのがベストプラクティスです。

Androidの場合
Android 9.0以降で暗号化されていない接続はデフォルトで無効となっています。
Android側もわざわざセキュリティリスクのある接続方法を
デフォルトにしないので当然ですね。

全ての通信をTransport Layer Security (TLS) に対応し、
HTTPではなくHTTPSを使用すれば問題ありません。

今日のセキュアプログラミングにおいてHTTPSを使用することは定石です。

どうしても事情がありHTTPをする場合は、
iOSのATSを無効化・限定無効化、AndroidのHTTPの許可設定を行います。

・送信データに重要情報を含めない
・受信データが攻撃者からの送信データである場合を想定する

など十分にセキュリティーを考慮して行わなければなりません。

またアプリの審査の際に、とりわけiOSのAppleの審査の場合、HTTPを使わなければならない合理的で特別な事情を、アプリリリースの際に説明する必要があります。

これらを踏まえ、原則として、HTTPSのみでアプリを設計しましょう。
不用意にセキュリティーホールを開けない実装が最も肝要です。

目次に戻る