web-dev-qa-db-ja.com

URLに埋め込み資格情報が含まれているサブリソース要求のブロッキングをバイパスする

次のように、URLにトークンが含まれるリンクを介して、内部Wikiにアクセスするユーザーを自動的に認証しています。

href="https://user:pass@Host/"

Chrome 59では、これは防止されています。

[非推奨] URLに認証情報が含まれているサブリソースリクエスト(例:https://user:pass@Host/)がブロックされています。

私は読んで、次のようなajaxリクエストでそれをバイパスしました:

サブリソース要求に埋め込まれた資格情報を置き換える方法

================================================== ======================

私の質問は:

誰かがリンクでそれを直接行う方法を知っていますか、または何らかの回避策を提供できますか?これは可能ですか?

7
RocketScience

コマンドラインオプション '--disable-blink-features = BlockCredentialedSubresources'を渡すと、予期した動作が復元されます。 Selneiumを使用している場合は、ブラウザー機能のargsオプションとしてそれを渡して、予期された動作を復元できます。

PHP: 'chromeOptions' => array( 'args' => ['--disable-blink-features = BlockCredentialedSubresources']);

Python:capabilities ['chromeOptions'] = {'args':['--headless']}

Chromiumチケット( https://bugs.chromium.org/p/chromium/issues/detail?id=731618 )によると、この動作は「非推奨」であっても、将来のバージョンでは復元されない可能性があります'。この場合、テストのためにsshコンジットを調べるか、可能であればHTTP認証の相互作用を防ぐためにIPをホワイトリストに登録するのが最善です。

アンソニー

4
Borgboy

ページにcss、javascript、または相対( "folder/file")またはbase-relative( "/ folder/file")の場所が含まれている場合、含まれているこれらのファイルは、ページのベースURL。user:passコンポーネントが含まれます。

このChromeへの変更 に続いてサブリソースのURLを不正にするのは、user:passコンポーネント(とにかく暗黙的に意味することは決してない...)です。

それが問題である場合は、<base href="https://Host/">タグをページに追加することで修正できます(つまり、ベースアドレスは同じですが、user:passコンポーネントなし)。 (ページがサブディレクトリにある場合、完全相対URLを機能させるには、ベースhrefにもサブディレクトリを含める必要があります。)

明確にするために、<a href="https://user:pass@Host/">Link</a>のようなリンクは引き続き機能します(user:pass URLが新しいページで開くリンクにあり、iframeのURLではない場合-たとえば、現在禁止されています)。しかし、リンクが機能する場合でも、上で説明した問題は、新しく開かれたページの相対パスに含まれる要素に当てはまります。

UPDATE:

これは Chromeのバグ として受け入れられ、サブリソースURLでのuser:passを禁止する新しい変更に直接関連しています。残念ながら、その議論のリンクをたどると、1つの提案された非常にありそうな解決策は ser:pass URLのサポートを完全に削除する のようです。そのディスカッションに追加され、この機能を維持することを支持して主張する情報に基づくコメントがあれば、おそらく役立つでしょう。

2
MikeBeaton

これを処理するには、chrome options: "--disable-blink-features = BlockCredentialedSubresources");を渡す必要があります。

完全なコードは次のとおりです。

ChromeOptions options = new ChromeOptions();
        options.addArguments("--start-maximized");
        options.addArguments("--disable-blink-features=BlockCredentialedSubresources");

        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("credentials_enable_service", false);
        prefs.put("profile.password_manager_enabled", false);
        options.setExperimentalOption("prefs", prefs);

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        driver = new ChromeDriver(capabilities);
1
kkashyap1707