2017-09-08 7 views
0

J'ai le code js ci-dessouscorrectif de sécurité pour window.location.href

var a = window.location.href.substring(0,window.location.href.lastIndex('/')+1) + "logout.jsp"; 

setTimeout(function(){ 
     window.location.href = a; 
},1000); 

Quand je suis scanner Fortify pour le fichier ci-dessus, il montre un risque de sécurité sur la ligne ci-dessus avec le code d'évaluation dynamique : Injection de code. Maintenant, je ne suis pas capable de comprendre comment résoudre ce problème. Dois-je ajouter un encodeur pour window.href ou comment le résoudre. Aussi, si nous avons encoder, ce que je dois faire.

+1

Je ne vois pas vraiment comment cela pourrait être exploité pour injecter du code arbitraire puisque 'location.href' est généré par votre serveur (sauf si certaines parties de l'URL proviennent d'une entrée utilisateur arbitraire). Cependant, votre code peut être réduit juste 'location.href =" logout.jsp "' qui fait la même chose. –

+1

@Derek 朕 會 功夫 Dans ce cas, je ne peux pas non plus voir comment l'injection peut se produire. Mais quelqu'un peut pousser JS après '# 'dans l'URL, ce qui pourrait créer des problèmes s'il n'est pas géré correctement. Il est donc probable que l'outil signale des faux positifs chaque fois qu'il voit 'window.location.href' en train d'être manipulé. – Nisarg

+0

Votre code Javascript réside-t-il directement dans la page HTML ou dans un fichier js séparé? –

Répondre

1

Si je comprends bien la logique, vous essayez d'obtenir le chemin de l'URL sans le nom de la page, et vous avez l'intention de rediriger vers celui-ci.

Si cela est exact, vous pourriez être en mesure de le faire fonctionner à l'aide,

var a = "logout.jsp"; 

setTimeout(function(){ 
     window.location.href = a; 
},1000); 

Il devrait en principe se débarrasser de la vulnérabilité, mais je ne suis pas complètement sûr si l'outil détecte une autre vulnérabilité dedans.

0

J'ai trouvé le lien suivant ... il pourrait peut-être vous aider:

https://security.stackexchange.com/questions/151806/jquery-js-dynamic-code-evaluation-code-injection-on-settimeout-line

Il est un faux positif.

Signalement de failles d'injection de code erroné est un problème bien connu avec HP Fortify et has confused developers before. Fortifier juste fait l'analyse statique de base du code Javascript et ne peut pas aller arbitrairement profond pour comprendre comment cela fonctionne. Comme @AlexanderOMara suggéré, il semble juste de découvrir la potentiellement dangereuse fonction setTimeout() qui peut, comme setInterval(), prendre un argument de chaîne qui sera exécuté sous forme de code, tout comme eval() fait. Ce le genre de vulnérabilité, l'outil vise à découvrir:

setTimeout('alert(' + document.location.hash.split('#')[1] + ')', 0); 

Mais dans votre cas, il n'y a pas, non filtrée entrée fournie par l'utilisateur à la fonction setTimeout() et il semble donc sans danger. Vous laissant avec une grande conclusion du fil lié:

Mon conseil est d'arrêter d'exécuter des rapports de fortification HP. Ou payez les cinq mille dollars, ou n'importe quoi pour aller à leurs cours afin que vous puissiez réellement comprendre leur malarkey.

répondues par Arminius.