Webアプリとネイティブアプリ、端末のどこまでアクセスできる?
たとえば文章を書くツールにWeb版とインストール版があるとします。どちらでも作業はできますが、サービスのコードが端末のどの情報や機能にアクセスできるかは変わります。ここでいうWebアプリは、ブラウザ内で動くページ側のコードです。ブラウザ本体のOS権限とは分けて考えます。ネイティブアプリには、端末に導入して動かすデスクトップ・モバイルアプリとコマンドラインツール(CLI)を含めます。
まず、どのファイルや端末の機能を使えるかを比べます。次に、得た情報を送れるかを見ます。Webページも、渡された情報を送ることができます。
端末のどの情報や機能にアクセスできる?
コードが動く場所で、最初の境界が違います。以下は、追加のアクセスを許可する前の、通常のアプリやWebページの例です。
デスクトップアプリ・CLI
ログイン中の利用者の権限
通常のWindowsデスクトッププログラムは、ログイン中の利用者の権限で動くことが多く、その利用者が読めるファイルに、ファイルごとの承認なしでアクセスできます。一時保存先にあるというだけで、ファイルがアプリごとに隔離されるわけではありません。実際に読めるかは各ファイルの保護設定で決まります。実行中のプロセス名も列挙でき、端末で使われているアプリの手がかりになります。OSのファイル保護やアプリのサンドボックスによって範囲は狭まります。
draft.txt下書きの文ファイルの内容がアプリへ入る ファイル保護やサンドボックスの制限は残る
モバイルのネイティブアプリ
アプリごとのサンドボックス
AndroidとiOSは、ほかのアプリの専用データからアプリを隔離します。ただし、端末の機能すべてに許可画面が出るわけではありません。Androidでは、加速度センサーの生データを専用の実行時承認なしで取得できます。バックグラウンドでの利用や取得頻度には別の制限があります。
専用の実行時承認画面なし
Webアプリのページ
ブラウザのAPIを通る
通常のページには、ホーム内の任意のフォルダやOSのプロセス一覧を直接走査する一般的なAPIはありません。ローカルファイルなら、利用者が選んだファイルをブラウザがページに渡せます。ページが得るのはその範囲で、ブラウザ本体のOS権限すべてではありません。選択方法や継続して使える条件は、ブラウザのAPIによって異なります。
draft.txt未選択のファイルやOSのプロセス一覧は直接渡らない
配布方式やOS側の保護でも範囲は変わります。サンドボックス化されたデスクトップアプリは、通常のデスクトッププロセスより狭い境界で動かせます。 Apple:macOSのApp Sandbox(外部サイト)
得た情報は端末の外へ送れる?
送れます。ネイティブアプリは、送信のたびに新しい承認を求めずに外向きのインターネット通信を行えます。Webページも、受け取った情報をブラウザの通信APIを通して送れます。端末内の情報や機能にアクセスできるかと、それを外へ送れるかは別の問いです。下の経路は可能性の例で、特定アプリの実際の動作ではありません。
使える通信の経路は異なります。通常のWebページは生のTCP/UDPソケットを直接開けず、HTTPやWebSocketなど、ブラウザが提供する方式を使います。別サイトからの返答を読むことには制限がありますが、それは送信全般の禁止ではありません。LANやlocalhostには別の条件があります。サイトはContent Security Policy(CSP)で接続先を絞ることもできますが、その設定はサイトごとです。
許可画面が出なければ、アクセスもできない?
そうとは限りません。Androidでは、アプリを作る人がINTERNET権限を宣言すると、OSがインストール時に自動で付与します。送信のたびに利用者へ確認する仕組みではありません。一方、マイクで録音するアプリはRECORD_AUDIO権限を宣言し、実行時に利用者へ許可を求めます。まだ許可されていなければ、Androidが承認画面を表示します。開発者の宣言、OSの自動付与、利用者の承認は、それぞれ役割が違います。
同じ作業なら、どちらを選ぶ?
Web版で目的を果たせるなら、ブラウザはページが端末に対して行える操作を仕組みで制限します。通常のページは、ログイン中の利用者やブラウザ本体が扱えるからといって、任意のファイルやOSのプロセス一覧を直接読み取れません。ファイルは利用者が選んだ対象など、ブラウザが提供する経路から受け取ります。この境界が設計どおりに働く限り、こうした直接アクセスはサイトの善意や利用者が毎回気づくことに頼らず防げます。ネイティブアプリが必要な作業もあり、その場合はアプリのサンドボックスと最初から使える権限が判断材料になります。同じ作業をブラウザの境界内で完結できるなら、サービスへ最初から渡す端末のアクセス範囲を小さくできます。
ここで比べたのは「できること」です。特定のアプリが実際に情報を収集・送信した証拠ではありません。