web-dev-qa-db-ja.com

ウェブサイトのドメインを確認するにはこれで十分ですか?

私は、いくつかの機密情報(本質的に認証情報を注入する)を含むJavaScriptを実行するブラウザー拡張機能を構築しています。したがって、ブラウザが信頼されたドメイン(たとえば、www.trusted.com)にある場合にのみ実行されるようにしたいと思います。私の現在のチェックは次のようなものです:

if (url.includes('https://www.trusted.com/')  || url.includes('https://trusted.com/')) {
    // do stuff
}

Urlが間違いなく現在の正しいURLである場合は、ブラウザーから直接お読みください。これで十分ですか?なぜか、なぜそうでないのか? (そうでない場合、どうすれば適切にそれを行うことができますか?)

2
personjerry

これで十分ですか?

いいえ、小切手に欠陥があります。

攻撃者は次のような方法で検証をバイパスできます。

_https://attacker.example/?https://www.trusted.com/
_

このURLはOrigin _attacker.example_に解決されますが、url.includes('https://www.trusted.com/')を満たします。

そうでない場合は、どうすれば適切に実行できますか?

例えば。 _URL.Origin_ を使用します。 urlがURL文字列の場合、次のようにできます。

_(new URL(url)).Origin === "https://www.trusted.com"
_

実際には、これも安全ですが、表現力が低く、間違いを起こしやすくなります。

_url.startsWith('https://www.trusted.com/')
_
4
Arminius