通过php访问Control-Allow-Origin服务器端

时间:2012-08-01 10:07:05

标签: php javascript tomcat cross-domain

我遇到了以下问题:Access-Control-Allow-Origin。

我读到了它,我发现可以使用php here

获得响应

但是我不知道如何使代码适应javascript,我仍然有同样的问题。

我在javascript中试过这个:

var url ='http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter';
req=Ajax("getResponse.php/?" + url)
  if (req.status=200)
alert("hi");

在php文件中:

<?php
echo file_get_contents($_GET['url']); 
?>

没有任何事情发生。我尝试使用ajax,例如:

$.ajax({
          url: "http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter",
          async: false,
          dataType: 'html',
          success: function (text) {
            alert(text);
          }
        });

但总是同样的问题......

我在网上看到很多人有同样的问题,但没有人得到回应。我刚刚找到了两种方法,使用chrome和一个选项,但只是建议开发人员在服务器上添加标题,但我不知道在哪里添加它们。我正在使用apache tomcat catalina for localhost。我有2个服务器,网页(在xampp中)和休息(在tomcat中)

1 个答案:

答案 0 :(得分:1)

更改

req=Ajax("getResponse.php/?" + url)

req=Ajax("getResponse.php/?url=" + url)

请记住这是不安全的,我可以将任何内容传递给url参数,你的php脚本会使用它。允许人们从本地系统读取文件,并让你的php脚本从其他地方下载恶意文件

编辑:

要获得保护的最佳方法是使用操作列表,这意味着用户永远不会看到该网址,只能修改操作字。例如

req=Ajax("getResponse.php/?do=getOrders")

然后在php

$actions = array();
$actions['getOrders'] = "http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter";

if(array_key_exists($_GET['do'], $actions))
 echo file_get_contents($actions[$_GET['do']]);

通常你想做更多只是将动作转换为url,你可能想要传递其他参数。在这种情况下,您可以使用一个开关或一堆IF来检查$ _GET ['do']是否等于某个东西然后处理它。但是需要几个小时来举例说明每种可能的实施方法,所以你可能想要使用谷歌。

请注意:虽然建议使用此方法为脚本增加100倍的安全性,但它不会泄漏,特别是如果您也开始传递用户的参数。再次使用谷歌。