Naidan
ガイド一覧

Webアプリとネイティブアプリ、端末のどこまでアクセスできる?

たとえば文章を書くツールにWeb版とインストール版があるとします。どちらでも作業はできますが、サービスのコードが端末のどの情報や機能にアクセスできるかは変わります。ここでいうWebアプリは、ブラウザ内で動くページ側のコードです。ブラウザ本体のOS権限とは分けて考えます。ネイティブアプリには、端末に導入して動かすデスクトップ・モバイルアプリとコマンドラインツール(CLI)を含めます。

まず、どのファイルや端末の機能を使えるかを比べます。次に、得た情報を送れるかを見ます。Webページも、渡された情報を送ることができます。

端末のどの情報や機能にアクセスできる?

コードが動く場所で、最初の境界が違います。以下は、追加のアクセスを許可する前の、通常のアプリやWebページの例です。

デスクトップアプリ・CLI

ログイン中の利用者の権限

通常のWindowsデスクトッププログラムは、ログイン中の利用者の権限で動くことが多く、その利用者が読めるファイルに、ファイルごとの承認なしでアクセスできます。一時保存先にあるというだけで、ファイルがアプリごとに隔離されるわけではありません。実際に読めるかは各ファイルの保護設定で決まります。実行中のプロセス名も列挙でき、端末で使われているアプリの手がかりになります。OSのファイル保護やアプリのサンドボックスによって範囲は狭まります。

通常のWindowsプログラムが、利用者に読めるdraft.txtの内容を読み取る例です。

モバイルのネイティブアプリ

アプリごとのサンドボックス

AndroidとiOSは、ほかのアプリの専用データからアプリを隔離します。ただし、端末の機能すべてに許可画面が出るわけではありません。Androidでは、加速度センサーの生データを専用の実行時承認なしで取得できます。バックグラウンドでの利用や取得頻度には別の制限があります。

別アプリの専用データは隔離されます。一方、加速度の値は専用の承認画面なしでこのアプリに届きます。

Webアプリのページ

ブラウザのAPIを通る

通常のページには、ホーム内の任意のフォルダやOSのプロセス一覧を直接走査する一般的なAPIはありません。ローカルファイルなら、利用者が選んだファイルをブラウザがページに渡せます。ページが得るのはその範囲で、ブラウザ本体のOS権限すべてではありません。選択方法や継続して使える条件は、ブラウザのAPIによって異なります。

ブラウザが選択されたdraft.txtをページへ渡します。選んでいないファイルは、この経路では渡りません。

配布方式や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のプロセス一覧を直接読み取れません。ファイルは利用者が選んだ対象など、ブラウザが提供する経路から受け取ります。この境界が設計どおりに働く限り、こうした直接アクセスはサイトの善意や利用者が毎回気づくことに頼らず防げます。ネイティブアプリが必要な作業もあり、その場合はアプリのサンドボックスと最初から使える権限が判断材料になります。同じ作業をブラウザの境界内で完結できるなら、サービスへ最初から渡す端末のアクセス範囲を小さくできます。

ここで比べたのは「できること」です。特定のアプリが実際に情報を収集・送信した証拠ではありません。