私は、いくつかの機密情報(本質的に認証情報を注入する)を含むJavaScriptを実行するブラウザー拡張機能を構築しています。したがって、ブラウザが信頼されたドメイン(たとえば、www.trusted.com)にある場合にのみ実行されるようにしたいと思います。私の現在のチェックは次のようなものです:
if (url.includes('https://www.trusted.com/') || url.includes('https://trusted.com/')) {
// do stuff
}
Urlが間違いなく現在の正しいURLである場合は、ブラウザーから直接お読みください。これで十分ですか?なぜか、なぜそうでないのか? (そうでない場合、どうすれば適切にそれを行うことができますか?)
これで十分ですか?
いいえ、小切手に欠陥があります。
攻撃者は次のような方法で検証をバイパスできます。
_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/')
_