Julp a parfaitement raison
Snippet
Résultat:
@Sephi:
Si l'endroit où la donnée utilisateur est mise est un attribut, l'échappement des caractères spéciaux est important
Exemple:
Peut finir en:
Avec l'entrée suivante pour $texte:
foo" onmousein="java$criptdocument.cookie);
L'OWASP fournit une cheat sheet sur XSS (en) pour savoir où mettre les données utilisateurs, où ne pas les mettre et comment les échapper.
Snippet
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<?php
function testHtmlSpecialChars($texte)
{
// $flags = ENT_QUOTES | ENT_HTML5 | ENT_QUOTES;
$flags = ENT_QUOTES | ENT_HTML401;
$encoding = "UTF-8";
var_dump(
array(
'Texte original ' => $texte
,'Texte htmlspecialchars() ' => htmlspecialchars($texte, $flags, $encoding)
,'Texte htmlspecialchars(...,false)' => htmlspecialchars($texte, $flags, $encoding, false)
)
);
}
$textes = array(
'texte simple'
,'texte l\'entité HTML non encodée & €'
,'texte avec l"entité HTML encodée € & l\'entité pas encodée €'
,'texte à <strong>balise</strong>'
);
array_walk($textes, 'testHtmlSpecialChars');
?>
</body>
</html>
Résultat:
Résultat a écrit :array (size=3)
'Texte original ' => string 'texte simple' (length=12)
'Texte htmlspecialchars() ' => string 'texte simple' (length=12)
'Texte htmlspecialchars(...,false)' => string 'texte simple' (length=12)
array (size=3)
'Texte original ' => string 'texte l'entité HTML non encodée & €' (length=39)
'Texte htmlspecialchars() ' => string 'texte l'entité HTML non encodée & €' (length=48)
'Texte htmlspecialchars(...,false)' => string 'texte l'entité HTML non encodée & €' (length=48)
array (size=3)
'Texte original ' => string 'texte avec l"entité HTML encodée € & l'entité pas encodée €' (length=75)
'Texte htmlspecialchars() ' => string 'texte avec l&quot;entité HTML encodée &euro; & l'entité pas encodée €' (length=92)
'Texte htmlspecialchars(...,false)' => string 'texte avec l"entité HTML encodée € & l'entité pas encodée €' (length=84)
array (size=3)
'Texte original ' => string 'texte à <strong>balise</strong>' (length=44)
'Texte htmlspecialchars() ' => string 'texte à &lt;strong&gt;balise&lt;/strong&gt;' (length=60)
'Texte htmlspecialchars(...,false)' => string 'texte à <strong>balise</strong>' (length=44)
@Sephi:
Si l'endroit où la donnée utilisateur est mise est un attribut, l'échappement des caractères spéciaux est important
Exemple:
<div data-message="<?php echo echapperLesBalises($texte); ?>">...</div>
Peut finir en:
<div data-message="foo" onmousein="java$criptdocument.cookie);">...</div>
Avec l'entrée suivante pour $texte:
foo" onmousein="java$criptdocument.cookie);
L'OWASP fournit une cheat sheet sur XSS (en) pour savoir où mettre les données utilisateurs, où ne pas les mettre et comment les échapper.