为什么eval()不能与JSON.parse()的输出一起使用?

时间:2015-05-16 20:47:37

标签: javascript php json eval

我想展示一些javascripts。为此我用php file_get_contents()然后json_encode()读取.js文件的内容并回显结果,然后在前端我通过$ .get()读取结果然后我做一个JSON.parse()结果(我试过没有解析它)但仍然eval()不能解决结果。

奇怪的是,如果我复制json_encode()的结果并将其粘贴到js变量中,那么eval()就可以了!

我做错了什么?

服务器端:

$name=$_GET['name'];
$t=  file_get_contents('../graphics/'.$name);
$t=  json_encode($t);
echo $t;

客户方:

$.get("php_lib/readGraph.php",{ name:name}, function(data, status){
                    if(status){
                       eval(JSON.parse(data));
                       }
                    else {
                        alert('Ajax error');
                    }
                    });

1 个答案:

答案 0 :(得分:2)

无需将代码编码为json。您没有传递像变量这样的格式化数据,而是输出完整的JavaScript代码。我试着简单地删除json部分。

希望您粘贴的PHP只是一个示例,在允许人们从您的服务器输出文件之前,您正在进行认真的验证。在代码中指定路径远远不够,因为只需将..添加到输入即可轻松避开。然后,黑客可以输出您的网络服务器正在运行的用户的所有内容,因为它具有读访问权限。甚至在您的Web根目录之外。除此之外,输出文件的更有效方法是使用google apps script