web-dev-qa-db-ja.com

マイクとウェブカメラにアクセスするために、ウェブサイトは許可を求める必要がありますか?

ブラウザーにWindows、Linux、Androidのいずれの設定もない限り、明示的に許可されていない限りは、WebページがマイクとWebカメラにアクセスするためにユーザーの操作(許可)を要求するのが標準設計ですか?望ましくないアクセスや偶発的なアクセスを防ぐために、どのようなセキュリティ対策が講じられていますか?

ルールと悪意の両方でこれを行うための標準的なプロセスは何ですか?私はJavascriptだと思います。

3
user58446

そのとおりです。 HTML5はgetUserMedia AP​​Iを公開して、ホスト上のメディアリソースにアクセスします。

ここを参照 はリファレンス実装です。これは実際のコードです: https://webaudiodemos.appspot.com/input/index.html

仕様がセキュリティについて言うことに関して、 このウェブサイト から引用します:

セキュリティ

一部のブラウザは、getUserMedia()を呼び出すと情報バーを表示します。これにより、ユーザーはカメラ/マイクへのアクセスを許可または拒否することができます。残念ながら、仕様はセキュリティに関しては非常に静かです。

Chromeの権限ダイアログ:アプリがSSL(https://)から実行されている場合、この権限は永続的です。つまり、ユーザーは毎回アクセスを許可/拒否する必要はありません。

これは、仕様自体に権限サポートを実装するための問題です: https://github.com/w3c/permissions/issues/62

ただし、実際には、すべての標準ブラウザは、メディアリソースにアクセスする前に、ポップアップボックス(または情報バー)を介して許可を求めます。したがって、最新のブラウザを使用している限り、許可を求める必要があります。

非標準のブラウザー、Chromium Shellの変更バージョン、またはデスクトップベースのelectronjs/nwjsアプリを使用している場合、ブラウザーができた可能性がありますは許可を求めませんが、このような場合にも、最新のブラウザが提供する他のすべてのセキュリティ保証(XSS監査、CORS、同一生成元ポリシーなど)は簡単に適用されます。

3
CodeExpress

Mozilla Developer Networkから:

MediaDevices.getUserMedia()メソッドは、カメラや画面共有やマイクなどの1つのビデオやオーディオ入力デバイスを使用する許可をユーザーに求めます。ユーザーが許可を与えると、返されたPromiseは結果のMediaStreamオブジェクトで解決されます。ユーザーが許可を拒否した場合、またはメディアが利用できない場合、PromiseはそれぞれPermissionDeniedErrorまたはNotFoundErrorで拒否されます。ユーザーが選択する必要がないため、返されたプロミスは解決も拒否もできないことに注意してください。

Firefoxでは、JavaScriptメソッドに初めてアクセスするときにブラウザにプロンプ​​トが表示されるように見えます。 JSコードはプロンプトではなく、ブラウザを処理します。

古い方法は引き続きFirefoxで機能し、まったく同じ方法で処理されます。コードを以下に示します。

// Fork getUserMedia for multiple browser versions, for those that need prefixes.
navigator.getUserMedia = (navigator.getUserMedia ||
                          navigator.webkitGetUserMedia ||
                          navigator.mozGetUserMedia ||
                          navigator.msGetUserMedia ||
                          navigator.oGetUserMedia );

/**
 * Checks whether getUserMedia() is available and if so, launches the animation.
 */

if (navigator.getUserMedia)
{
    navigator.getUserMedia ({ audio: true },
    // Success callback
    // ...
}

これは2つのことを意味します。

  1. JavaScriptを有効にするか、NoScriptで許可する必要があります
  2. JSメソッドが呼び出される場所とタイミングに関係なく、ブラウザーはユーザーにオプションを要求します。

MDNリンク: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

古いデモ(まだ機能します): https://www.openprocessing.org/sketch/175689

2
dark_st3alth