ブラウザーにWindows、Linux、Androidのいずれの設定もない限り、明示的に許可されていない限りは、WebページがマイクとWebカメラにアクセスするためにユーザーの操作(許可)を要求するのが標準設計ですか?望ましくないアクセスや偶発的なアクセスを防ぐために、どのようなセキュリティ対策が講じられていますか?
ルールと悪意の両方でこれを行うための標準的なプロセスは何ですか?私はJavascriptだと思います。
そのとおりです。 HTML5はgetUserMedia
APIを公開して、ホスト上のメディアリソースにアクセスします。
ここを参照 はリファレンス実装です。これは実際のコードです: https://webaudiodemos.appspot.com/input/index.html
仕様がセキュリティについて言うことに関して、 このウェブサイト から引用します:
セキュリティ
一部のブラウザは、getUserMedia()を呼び出すと情報バーを表示します。これにより、ユーザーはカメラ/マイクへのアクセスを許可または拒否することができます。残念ながら、仕様はセキュリティに関しては非常に静かです。
Chromeの権限ダイアログ:アプリがSSL(https://)から実行されている場合、この権限は永続的です。つまり、ユーザーは毎回アクセスを許可/拒否する必要はありません。
これは、仕様自体に権限サポートを実装するための問題です: https://github.com/w3c/permissions/issues/62
ただし、実際には、すべての標準ブラウザは、メディアリソースにアクセスする前に、ポップアップボックス(または情報バー)を介して許可を求めます。したがって、最新のブラウザを使用している限り、許可を求める必要があります。
非標準のブラウザー、Chromium Shellの変更バージョン、またはデスクトップベースのelectronjs/nwjsアプリを使用している場合、ブラウザーができた可能性がありますは許可を求めませんが、このような場合にも、最新のブラウザが提供する他のすべてのセキュリティ保証(XSS監査、CORS、同一生成元ポリシーなど)は簡単に適用されます。
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つのことを意味します。
MDNリンク: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
古いデモ(まだ機能します): https://www.openprocessing.org/sketch/175689