Je reçois une chaîne à partir de l'identificateur de fragment de la fenêtre en cours (location.hash
). Je veux utiliser cette chaîne comme argument à location.replace(str)
.assainissement des chaînes d'URL non fiables qui seront transmises à location.replace
Dans des circonstances normales, la chaîne viendra du contrôle de code I, donc je ne suis pas inquiet de valider que la chaîne est une URL. Si la chaîne n'est pas une URL, l'appel à remplacer échouera tout simplement. C'est très bien. Ce qui m'inquiète, c'est de m'assurer que la chaîne n'est PAS une URL javascript:
ou toute autre chose qui permettrait à quelqu'un d'exécuter Javascript arbitrairement sur mon domaine. Actuellement, je vérifie juste que str.indexOf('http') == 0
.
Est-ce suffisant ou devrais-je désinfecter cette chaîne un peu plus?
Votre exemple de chaîne de données ne passerait pas le test que j'ai proposé car il ne commence pas par 'http'. Je ne pense pas que je doive m'inquiéter des redirections non plus. J'essaie seulement d'empêcher l'exécution de Javascript non autorisé dans le contexte de mon domaine. – Brian
Eh bien, votre code teste pour 'indexOf' http et ne commence pas avec http. Si l'attaquant place http quelque part dans la charge utile, votre test passerait, et l'attaquant serait toujours capable d'exécuter du code javascript. –
str.indexOf ('http') == 0 est équivalent à startsWith. – Brian