it-swarm.com.de

Umgehen der Blockierung von Teilressourcenanforderungen, deren URLs eingebettete Anmeldeinformationen enthalten

Ich habe Benutzer, die unser internes Wiki besuchen, automatisch über einen Link mit einem Token in der URL wie folgt authentifiziert: 

href="https://user:[email protected]/"

In Chrome 59 wird dies verhindert.

[Deprecation] Subresource-Anforderungen, deren URLs eingebettete Anmeldeinformationen enthalten (z. B. https://user:[email protected]/), werden blockiert.

Ich habe es gelesen und in einer Ajax-Anfrage wie folgt umgangen:

So ersetzen Sie eingebettete Berechtigungsnachweise in Teilressourcenanfragen

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

Meine Frage ist:

Weiß jemand, wie man das direkt im Link macht, oder kann man eine Art Workaround anbieten? Ist das überhaupt möglich?

5
RocketScience

Durch Übergeben der Befehlszeilenoption '--disable-blink-features = BlockCredentialedSubresources' wird das erwartete Verhalten wiederhergestellt. Wenn Sie Selneium verwenden, können Sie es in den Browser-Funktionen als Option args übergeben, um das erwartete Verhalten wiederherzustellen.

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

Python: Fähigkeiten ['chromeOptions'] = {'args': ['--headless']}

Laut dem Chromium-Ticket ( https://bugs.chromium.org/p/chromium/issues/detail?id=731618 ) kann dieses Verhalten in zukünftigen Versionen nicht wiederhergestellt werden, obwohl es sich in "Deprecation" befindet. In diesem Fall empfiehlt es sich, die ssh-Conduits zum Testen oder Whitelist der IP-Adresse zu verwenden, um die HTTP-Auth-Interaktion zu verhindern.

Anthony

3
Borgboy

Wenn Ihre Seite css, javascript oder anderes Material mit relativen ("folder/file") oder base-relativen ("/ folder/file") Speicherorten enthält, besteht das Problem darin, dass diese enthaltenen Dateien von einer relativen URL abgerufen werden Basis-URL der Seite, die einen Benutzer enthält: pass-Komponente.

Es ist dieser Benutzer: pass components (was Sie möglicherweise sowieso nie implizieren wollten ...), was die URL der Subressourcen illegal macht, nachdem diese Änderung zu Chrome erfolgt.

Wenn dies Ihr Problem ist, können Sie das Problem beheben, indem Sie Ihrer Seite ein <base href="https://Host/">-Tag hinzufügen (d. H. Dieselbe Basisadresse, jedoch ohne den Benutzer: Komponente übergeben). (Wenn sich Ihre Seite in einem Unterverzeichnis befindet, müssen Sie auch das Unterverzeichnis in die Basis-Href einschließen, damit vollständig relative URLs funktionieren.)

Um klar zu sein, funktionieren Links wie <a href="https://user:[email protected]/">Link</a> immer noch (solange sich der Benutzer: pass URL in einem Link befindet, der auf einer neuen Seite geöffnet wird, und keine URL für einen iframe ist, der jetzt verboten ist). Aber selbst wenn der Link funktioniert, gilt das oben beschriebene Problem für Elemente, die in relativen Pfaden auf der neu geöffneten Seite enthalten sind.

UPDATE:

Dies wurde als Fehler in Chrome akzeptiert, der in direktem Zusammenhang mit den neuen Änderungen steht, die Benutzer verbieten: Übergeben Sie URLs für untergeordnete Ressourcen. Nach den Links in dieser Diskussion scheint es leider so, dass eine vorgeschlagene und höchstwahrscheinliche Lösung darin besteht, die Unterstützung für Benutzer zu entfernen: URLs vollständig übergeben . Alle informierten Kommentare, die zu dieser Diskussion hinzugefügt wurden, und das Argument, diese Funktion beizubehalten, würden vermutlich helfen.

2
Mike Beaton

Um dies zu handhaben, müssen wir Chrome-Optionen übergeben: "--disable-blink-features = BlockCredentialedSubresources");

Der vollständige Code ist unten aufgeführt: 

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