-1

我在这个主题上有问题: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);
          }
        });

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

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

4

1 回答 1

1

改变

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

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

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

编辑:

保护它的最佳方法是使用操作列表,这意味着用户永远不会看到 url,只能修改操作词。例如

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 倍的安全性,但它并非万无一失,特别是如果您也开始传递来自用户的参数。再次使用谷歌。

于 2012-08-01T10:11:07.243 回答