web-dev-qa-db-fra.com

Contourner le blocage des demandes de sous-ressources dont les URL contiennent des informations d'identification intégrées

J'ai authentifié automatiquement les utilisateurs visitant notre wiki interne via un lien avec un jeton dans l'URL comme ceci: 

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

Dans Chrome 59, cela est empêché.

[Obsolète] Les demandes de sous-source dont les URL contiennent des informations d'identification intégrées (par exemple, https://user:pass@Host/) sont bloquées.

J'ai lu et je l'ai contourné dans une requête ajax comme celle-ci:

comment remplacer les informations d'identification intégrées dans les demandes de sous-ressources

: =======================

Ma question est:

Est-ce que quelqu'un sait comment le faire directement dans le lien, ou pouvez-vous fournir une sorte de solution de contournement? Est-ce seulement possible?

5
RocketScience

Passer l'option de ligne de commande '--disable-blink-features = BlockCredentialedSubresources' restaure le comportement attendu. Si vous utilisez Selneium, vous pouvez le transmettre en tant qu'option args dans les fonctionnalités du navigateur pour restaurer le comportement attendu.

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

Python: capacités ['chromeOptions'] = {'args': ['--headless']}

Selon le ticket Chromium ( https://bugs.chromium.org/p/chromium/issues/detail?id=731618 ), ce problème peut ne pas être restauré dans les versions ultérieures alors qu'il se trouve dans 'Deprecation'. Dans ce cas, il serait peut-être préférable d'examiner les conduites ssh pour tester ou de répertorier l'IP de la liste blanche, si possible, afin d'empêcher l'interaction HTTP Auth.

Anthony

3
Borgboy

Si votre page comprend des fichiers css, javascript ou autres avec des emplacements relatifs ("dossier/fichier") ou relatifs par rapport à la base ("/ dossier/fichier"), le problème est que ces fichiers inclus seraient extraits de l'URL relative au fichier. URL de base de la page, qui comprend un composant utilisateur: pass.

C’est cet utilisateur: pass composant (que vous n’avez peut-être jamais voulu dire de toute façon ...) qui rend illégale l’URL des sous-ressources, après cette modification apportée à Chrome .

Si tel est votre problème, vous pouvez le résoudre en ajoutant une balise <base href="https://Host/"> à votre page (c'est-à-dire la même adresse de base, mais sans le composant user: pass). (Si votre page se trouve dans un sous-répertoire, vous devez également inclure le sous-répertoire dans le répertoire de base href, pour que les URL entièrement relatives fonctionnent.)

Pour être clair, des liens tels que <a href="https://user:pass@Host/">Link</a> fonctionnent toujours (tant que l'utilisateur: pass URL est dans un lien qui s'ouvre dans une nouvelle page et n'est pas une URL pour un iframe, disons - qui est maintenant banni). Mais même lorsque le lien fonctionne, le problème que j'ai décrit ci-dessus s'applique aux éléments inclus avec des chemins relatifs dans la page nouvellement ouverte.

METTRE À JOUR:

Cela a été accepté en tant que bug dans Chrome , directement lié aux nouvelles modifications interdisant l'utilisateur: transmettez des URL de sous-ressources. Malheureusement, en suivant les liens dans cette discussion, il semble que la solution proposée et assez probable est pour supprimer totalement le support pour l'utilisateur: passer les URL }. Tout commentaire éclairé ajouté à cette discussion et plaidant en faveur du maintien de cette fonctionnalité serait probablement utile.

2
Mike Beaton

Pour gérer cela, nous devons passer les options de chrome: "--disable-blink-features = BlockCredentialedSubresources");

Le code complet est mentionné ci-dessous: 

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