2010-01-21 5 views
1

J'essaie de résoudre une exception de script intersite dans mon code. Je reçois une erreur XSS à la ligne où je me trouvais en utilisant l'expression JSP dans un code JSscript intersite en JavaScript

ex: dans une fonction JS

function ex(){ 
    ..... 
    var loc = '<%= location.getLocDetails()>'; 
    ..... 
} 

S'il vous plaît laissez-moi savoir, si vous avez une solution/solution de contournement?
Note: location.getLocDetails() renvoie une chaîne

+0

Que retourne 'location.getLocDetails()'? A quoi ressemble la source lorsque le JS est exécuté, et quelle est l'URL de votre site? Avez-vous vraiment une erreur sur cette ligne, ou sur la ligne que vous essayez d'utiliser 'loc'? – Kobi

+1

Effectuez une Source d'affichage et mettez à jour votre question avec la valeur qui sera finalement rendue à la place de location.getLocDetails() –

Répondre

1

Il y a seul moyen de XSS risque si location.getLocDetails() peut retourner entrée contrôlée par l'utilisateur. Si par exemple il renvoie la valeur directement de l'en-tête HTTP Accept-Language sans aucune vérification de syntaxe ou échappement, alors il y a en effet des moyens de risques XSS.

Vous devriez toujours évasion affichage entrée pendant contrôlé par l'utilisateur, au moins toutes les entrées qui peuvent dans une certaine mesure être contrôlé par le client, y compris les en-têtes de requête HTTP et URL de la demande. Il est fondamentalement assez simple, il suffit d'utiliser un outil d'affichage qui échappe aux entités HTML <, >, " et '.

En cas de JSP, moyen le plus simple est d'utiliser JSTL (juste déposer jstl-1.2.jar dans /WEB-INF/lib si pas encore fait) tag <c:out> pour cela. Ainsi, la ligne particulière devrait être remplacé par (en supposant que location est déjà disponible en page demande, session ou champ d'application):

var loc = '<c:out value="${location.locDetails}" />'; 

Cela dit, il est vrai temps de se débarrasser de tous scriptlets dans votre Fichier JSP, il ferait seulement mieux :) Pour en savoir plus sur JSTL, read this.

+0

Une autre façon d'y échapper est d'utiliser $ {fn: escapeXml (location.locDetails)}. Je le trouve moins encombré. –

+0

@ Manolo Santos: La question du goût. Si à l'intérieur d'une balise HTML, par ex. '', alors 'fn: escapeXml' est plus agréable. Si dehors, ça ne me dérange pas. Le 'c: out' a cependant pour avantage de pouvoir y mettre plusieurs expressions. – BalusC

Questions connexes