PHP来源是不允许的访问控制允许来源

问题描述:

我有我的ftp/php跨域请求的问题。通过我的浏览器,我可以通过传递如下参数来访问内容:http://xxx.org/models/get.php?file=default_app/y_car_new/stock.jpg。但用JavaScript相同的链接给了我地http://localhost:8000 is not allowed by Access-Control-Allow-Origin 我已经尝试过PHP来源是不允许的访问控制允许来源

标题(“访问控制允许来源:*”)

与下面的脚本没有运气。我有一个get.php文件在我的ftp访问只有服务器与以下代码:

<? 

if(isset($_GET["file"])) { 
    $filepath = "/.../models/".$_GET["file"]; 
    //echo "path: " , $filepath; 
    $filetype = pathinfo($filepath); 
    //echo $filetype['extension'], "\n"; 
    header('Access-Control-Allow-Origin: *'); 
    header('Content-Type: '.$filetype['extension']); 
    // //header('Content-Type: application/octet-stream'); 
    header('Content-Length: ' . filesize($filepath)); 
    ob_clean(); 

    readfile($filepath); 
}//if 

else { 
    echo '<img src="http://stupidbadmemes.files.wordpress.com/2013/02/no-you-may-not.jpg"></img>'; 
} 


?> 

我在这个脚本中做错了什么?

+0

发送跨来源头与响应一起是有点儿毫无意义的。这就像授予访问银行保险库的权限,方法是将其写入存储在保管库中的备注上。无法进入保险库,因为您没有说明您可以进入的注释,并且因为锁定在里面而无法获取注释。 – 2013-04-10 16:34:02

我会尝试打开你的访问控制多一点,如果你要发送GET数据来回。同源规则可能非常挑剔。

Allow-Origin管理哪些服务器可以发出请求。

Max-Age实施到期。

Allow-Methods允许请求者发送GET/POST /等。数据给你。

下面是一个例子:

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Max-Age: 3628800'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); 

旁注当生产中的*增加了一些风险存在

允许来源应设置为您的具体要求域。

请仔细研究您的输入消毒,访问这样的文件是一件有风险的事情。你本质上是打开人们阅读工作目录中的任何文件。

$filepath = "/.../models/".$_GET["file"];

+0

我明白这些风险,但现在我只是需要它的工作。 反正我试图将其添加到脚本,它仍然不起作用 – psychok7 2013-04-10 16:42:48

+0

系统上的任何文件,实际上,不只是当前目录中的文件。考虑'file = ../../../../etc/passwd'! – duskwuff 2013-04-10 17:03:44

+0

我认为你的答案开始工作...尽管我没有改变任何东西...我会继续测试更多,并将你的答案标记为正确答案 – psychok7 2013-04-11 14:01:55

这是客户端“问题”。这是一个由浏览器实施的禁止从一个域到另一个域的请求的安全问题。有一些解决方法,特别是JSONP。

+0

我以前工作过,虽然我没有写另一个脚本。问题是,我无意中删除了它,现在我正试图重写它.. – psychok7 2013-04-10 16:43:46

+0

有一个使用jQuery。 http://www.jquery4u.com/json/jsonp-examples/ – Jonathon 2013-04-11 08:14:53

+0

我需要返回的内容包括图像和XML。我可以使用jsonP来获取xml内容吗? – psychok7 2013-04-11 10:55:22