2009-08-01 7 views
2

ok, je commence avec une méthode très simple:problème de sécurité Javascript

alert(someText); 

« someText » est une variable, les utilisateurs passeront une valeur par une forme. Y aura-t-il une chance que l'utilisateur passe le texte suivant, et injecte du code dans mon Javascript? Par exemple, l'utilisateur peut-il passer ceci dans cette méthode:

"anotherText"); alert (« le nexttext »

Si oui, comment puis-je l'empêcher de se produire? sinon, quelqu'un peut-il parler des préoccupations de sécurité au sujet de javascript?

Répondre

7

Non, il ne fonctionne pas de cette façon. chaîne Les valeurs ne sont pas substitués où ils sont utilisés, ils sont simplement utilisés comme des chaînes il n'y a donc pas de problème de sécurité

Le temps que vous pourriez avoir à vous soucier de c'est lorsque vous utilisez eval:..

eval("alert(\" + someText + "\");"); 

(Oui, je réalise que c'est un exemple inventé ...)

4

Fondamentalement, tant que vous n'appelez pas "eval" (ou une fonction qui fait), et que vous n'injectez pas Javascript créé par les utilisateurs directement dans les pages (via la balise de script), vous ne devriez pas avoir à vous soucier de quoi que ce soit.

2

Une fois que vous avez une variable dans javascript, cela n'aura pas d'importance si vous ne faites pas d'eval ou si vous ne définissez pas la propriété innerHTML d'un élément DOM. En dehors de cela, il existe un potentiel d'injection qui dépend de la façon dont vous obtenez la valeur du formulaire au javascript.

Si, par exemple, le formulaire est soumis au serveur et que la valeur de la variable est définie en écrivant le javascript côté serveur, vous risquez d'avoir un problème. Quelque chose comme ça laisserait évidemment le script ouvert à l'injection.

var someText = "<?php echo $_POST["someText"]; ?>"; 

Il est donc difficile de dire si vous pourriez avoir un problème de sécurité sans savoir comment vous obtenez la valeur du formulaire. D'après mon expérience, le code côté serveur est la cause de la plupart des vecteurs XSS. En termes de javascript, il suffit généralement de regarder eval et innerHTML.

0

si "someText" est rendu par serveur, par exemple JSP, la vitesse, il est dangereux

par exemple

<script> 
    alert({{someText}}) 
</script> 

alors avant l'exécution JavaScript, alors que l'analyse syntaxique HTML, il est dangereux

mais si "sometext" est une variable javascript, la réponse de @ Zifre est correcte;

à côté, à l'exception du mot clé "eval", nouvelle fonction (sometext), location.href = sometext ...... peut invoquer certaines attaques

Questions connexes