2015-07-20 1 views
0

Je lis la feuille de prévention des OWSAP, mais je me suis confondu avec la règle numéro 2.attributs HTML échapper

Règle n ° 2 - Attribut Évasion Avant d'insérer des données non fiables dans HTML Attributs communs Règle n ° 2 est pour mettre des données non fiables dans des valeurs d'attribut typiques comme largeur, nom, valeur, etc. Ceci ne devrait pas être utilisé pour des attributs complexes comme href, src, style, ou n'importe lequel des gestionnaires d'événements comme onmouseover. Il est extrêmement important que les attributs du gestionnaire d'événements suivent la règle n ° 3 pour les valeurs de données HTML JavaScript.

ce qui est la raison pour laquelle les attributs complexes ne doivent pas être échappés (Cela ne devrait pas être utilisé pour les attributs complexes comme href, Src, le style) est cela crée une ambiguïté ou briser les valeurs des attributs ?

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Répondre

1

Il n'est pas qu'ils ne devraient pas être échappé, il est que leur échapper est insuffisante pour rendre les données en toute sécurité contre les attaques XSS. L'échappement des données l'empêche de se libérer de l'attribut et de démarrer un nouvel attribut ou élément.

Cela ne suffit pas si l'attribut est déjà capable d'exécuter JavaScript.

Ceci est vulnérable à XSS:

$external_input = '"><script>alert("got you");</script>'; 
?><input class="<?php echo $external_input ?>"> 

Mais si vous échappez $external_input alors la valeur d'attribut devient tout simplement un non-sens. Ce n'est pas dangereux. D'autre part, l'exemple suivant autorise l'exécution de scripts arbitraires même si le code HTML est échappé.

$external_input = 'alert("got you");'; 
?><input onmouseover="<?php echo htmlspecialchars($external_input); ?>"> 

Vous devez vous assurer que les données sont sans danger pour tout format de données est la valeur (et alors vous devriez échapper encore).

Mettre une valeur dans un attribut href? Assurez-vous qu'il s'agit d'une URL et que le modèle d'URL est celui que vous avez approuvé (comme http: et pas comme javascript:).

Mettre une valeur dans un script? Échappez-vous pour le JS (que vous utilisez généralement un codeur JSON pour).

Et ainsi de suite.