HTML-Entité s'échapper pour prévenir les attaques de type XSS
J'ai quelques entrées de l'utilisateur. Dans mon code, je veille à ce que les symboles suivants sont échappés:
& -> &
< -> <
> -> >
OWASP affirme qu'il y a plus de caractères à échapper.
Pour les attributs, je fais un autre type d'échappement:
& -> &
" -> "
Cela garantit que tous les attributs sont encadrés par des ". Cela me fait sûr de mon html attributs, mais pas sur le HTML lui-même.
Je me demande si mon échappement est suffisante. J'ai lu ce post, mais je ne suis pas encore sûr de mon inquiétude.
(JavaScripts sont échappés avec l'OWASP-Bibliothèque)
' -> '
et% -> &perc;
(pour les XSS, codage de caractères par %34 etc.)- Dans ce cas, serait de remplacer
%
par&perc;
utile? &perc;
est en effet de moins en moins utile contre les XSS, mais il peut masquer les url. Les navigateurs ne prennent pas un % de code pour son char, c'est à dire:<a href="%6Aavascript:alert('hi')">
n'invoque pas le javascript.
Vous devez vous connecter pour publier un commentaire.
- Je utiliser l'OWASP (ESAPI) de la bibliothèque ainsi, pour échapper à des chaînes pour les différents types d'affichage, utilisez :
HTML (à supposer jsp)
Mise à jour (2017)
Comme ESAPI Encodeurs sont considérés comme héritage, une meilleure alternative a été créé et est activement maintenu, je vous recommande fortement de l'aide de l' OWASP Codeur Java à la place.
Si votre projet utilise déjà
ESAPI
, un l'intégration a été ajoutée pour vous permettre d'utiliser cette bibliothèque pour le codage de la place.L'usage est expliqué sur leur page wiki, mais pour le bien de l'achèvement, c'est comment vous pouvez l'utiliser pour contextuellement l'encodage de vos données:
HTML (à supposer jsp)
PS: de plus de contextes existent et sont pris en charge par la bibliothèque
String safe = ESAPI.encoder().encodeForHTML( request.getParameter( "input" ) );
<input id="rlv" type="text" name="releaseVersion" maxlength="250" size="25" value="<%=$ESAPI.encoder().encodeForHTMLAttribute(request.getAttribute("relV"))%>" style="font-size:12px;font-family:arial,helvetica,sans-serif;" onkeyup = "releaseVersionSearch();" onblink="releaseVersionSearch();" class="modulecontent" />
quand je fais comme ça ma page ne se charge pas sur navigateurJe vous recommande d'utiliser Appache Commune Lang bibliothèque pour échapper à cordes, par exemple pour échapper HTML:
la bibliothèque a de nombreuses méthodes utiles pour échapper au format HTML, XML, Javascript.
'
en'
, de sorte qu'il n'est pas adapté pour le HTML s'échapper pour prévenir les attaques de type XSS