21 votes

Pourquoi les navigateurs permettent-ils à onmousedown JS de modifier href?

J'ai remarqué depuis très longtemps que lorsque vous essayez de copier un emplacement de lien ou d'ouvrir un lien sur Facebook, il modifie le lien et le fait passer par l.php.

Par exemple, je peux être envoyé à

 http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.google.com%2F&h=DKVUritNDJDJLDLVbldoDLFKBLOD5dlfDJY_-d3fgDUaA9b

même si mon navigateur affiche l'aperçu du lien comme http://www.google.com/.

Aujourd'hui, j'ai examiné de plus près en utilisant Firebug et j'ai trouvé que Facebook ajoute onmousedown="UntrustedLink.bootstrap($(this)[...] dans la balise . Dès que j'ai fait un clic droit sur le lien, j'ai vu l'attribut href changer dans Firebug.

Cela me préoccupe.

Le conseil que beaucoup d'entre nous ont donné aux personnes moins familiarisées avec la technologie (vérifiez où le lien vous mène avant de cliquer pour ne pas devenir une victime de l'hameçonnage) semble maintenant être devenu inutile. N'est-ce pas un risque pour la sécurité? Les sites d'hameçonnage ne peuvent-ils pas en abuser ?

Pourquoi les navigateurs n'empêchent-ils pas ce comportement en interdisant à onmousedown de changer le href ou en exécutant le javascript avant de lire l'attribut href, pour que je sois dirigé vers l'endroit auquel je pensais aller, et pas vers celui qui a changé pendant que je cliquais dessus ?

Édition : Je tiens à souligner brièvement que ce qui me préoccupe plus que le risque d'hameçonnage, c'est que les utilisateurs sont induits en erreur et cela me semble simplement incorrect que cela puisse se produire, que ce soit par une source de confiance ou non.

5voto

nwellcome Points 1564

Je suis d'accord qu'il y a un potentiel de phishing ici. Ceci a été signalé comme un bug dans FireFox il y a déjà pas mal de temps, mais le problème est le suivant :

    google

Les événements remontent à leur parent, vous devriez détecter si un événement onmousedown s'apprête à changer le href d'un élément enfant. Cela semble raisonnable ? D'accord, et que diriez-vous de ceci :

    function switcher() {
       window.location = "www.somewhereelse.com";
       return false;
    }

    google

Donc, nous devons être attentifs à window.location dans les fonctions déclenchées par les événements onmousedown également. Cela semble toujours raisonnable ? Et si j'ai l'événement onmousedown qui supprime le lien complètement, le remplace par un nouvel élément et déclenche ensuite le clic sur celui-ci. Je peux continuer à donner des exemples.

Le point c'est que Javascript peut être utilisé pour rediriger les gens en utilisant la barre d'état - vous ne devriez pas lui faire confiance, vous ne pouvez faire confiance qu'à l'URL.

Pour corriger cela, les navigateurs devraient donner la valeur de l'attribut href définie sur un lien au moment du clic la priorité sur tout autre événement qui pourrait se produire, en gros, désactiver les événements de la souris sur les balises d'ancre. Je doute qu'ils fassent ça, cela casserait trop d'applications qui existent déjà.

Éditer : En alternative, j'ai vu des gens proposer différentes méthodes pour détecter et avertir l'utilisateur des possibles détournements de lien, mais je n'en ai pas encore vu être implémentées.

3voto

Hyangelo Points 1628

Le conseil que beaucoup d'entre nous ont donné aux personnes moins expérimentées en technologie (vérifiez où le lien vous mène avant de cliquer pour ne pas devenir victime de phishing) semble maintenant être devenu inutile.

Si par "vérifier" vous entendez l'aperçu du lien que les navigateurs affichent dans la barre d'état en bas, alors vous avez raison. Ce n'est pas suffisant pour vérifier si un lien va vraiment là où il prétend aller. Par exemple, l'exécution du script jquery ci-dessous sur une page fera que tous les liens iront vers google.com quel que soit la cible réelle du lien:

$('a').click(function(evt){evt.preventDefault();window.location.href="http://google.com"})

2voto

Richard EB Points 269

Les sites de phishing ne peuvent-ils pas en abuser ?

Pas vraiment, car c'est sur Facebook que ledit JavaScript devrait être appelé. L'utilisateur devrait d'abord se rendre sur une source non fiable qui intégrerait le JavaScript dans la balise <script>.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X