パーミッション

Denoはデフォルトで安全です。したがって、特に有効にしない限り、denoモジュールには、ファイル、ネットワーク、環境などのアクセス権がありません。セキュリティ上重要な領域や機能にアクセスするには、コマンドラインでdenoプロセスに許可を与える必要があります。

次の例では、mod.tsにファイルシステムへの読み取り専用アクセスが許可されています。それに書き込むことも、その他の機密性の高い機能を実行することもできません。

deno run --allow-read mod.ts

パーミッションのリスト

次のパーミッションを使用できます:

  • -A, --allow-all すべてのパーミッションを許可します。これにより、すべてのセキュリティが無効になります。
  • --allow-env 環境変数の取得や設定などの環境アクセスを許可します。
  • --allow-hrtime 高分解能の時間測定を可能にします。高解像度の時間は、タイミング攻撃やフィンガープリントに使用できます。
  • --allow-net=<allow-net> ネットワークアクセスを許可します。オプションのドメインのコンマ区切りリストを指定して、許可されたドメインの許可リストを提供できます。
  • --allow-plugin プラグインの読み込みを許可します。 --allow-pluginは不安定な機能であることに注意してください。
  • --allow-read=<allow-read> ファイルシステムの読み取りアクセスを許可します。オプションのコンマ区切りのディレクトリまたはファイルのリストを指定して、許可されたファイルシステムアクセスの許可リストを提供できます。
  • --allow-run サブプロセスの実行を許可します。サブプロセスはサンドボックスで実行されないため、denoのプロセスと同じくセキュリティ制限がないことに注意してください。したがって、注意して使用してください。
  • --allow-write=<allow-write> ファイルシステムの書き込みアクセスを許可します。オプションのコンマ区切りのディレクトリまたはファイルのリストを指定して、許可されたファイルシステムアクセスの許可リストを提供できます。

パーミッション許可リスト

Denoでは、許可リストを使用して一部のパーミッションの細かさを制御することもできます。

この例では、/usrディレクトリのみを許可リストすることによってファイルシステムアクセスを制限していますが、プロセスが/etcディレクトリ内のファイルにアクセスしようとしたため、実行は失敗します。

$ deno run --allow-read=/usr https://deno.land/std@0.65.0/examples/cat.ts /etc/passwd
error: Uncaught PermissionDenied: read access to "/etc/passwd", run again with the --allow-read flag
► $deno$/dispatch_json.ts:40:11
    at DenoError ($deno$/errors.ts:20:5)
    ...

代わりに/etcを許可リストに加え、正しいパーミッションでもう一度試してください:

deno run --allow-read=/etc https://deno.land/std/examples/cat.ts /etc/passwd

--allow-write--allow-readと同じように機能します

ネットワークアクセス

fetch.ts:

const result = await fetch("https://deno.land/");

これは、ホスト/ URLを許可するリストの例です:

deno run --allow-net=github.com,deno.land fetch.ts

もしfetch.tsが他のドメインへのネットワーク接続を確立しようとすると、プロセスは失敗します。

すべてのホスト/ URLへの呼び出しを許可:

deno run --allow-net fetch.ts