解决同源政策?

时间:2015-06-04 15:44:51

标签: javascript php security browser same-origin-policy

我在本地安装的XAMPP上有一个名为 TEST.PHP 的文件。当我转到 http://127.0.0.1/TEST.PHP 并执行它时,脚本应将值 ID和NAME 发布到网站 http://otherdomain.com/post.php 并将输出放入 DATA 。由于同源政策,这不起作用。当我跟踪包时,我得到一个错误calles “NS_ERROR_DOM_BAD_URI”。我现在的问题是,无论如何都可以使其成为可能而无需访问 http://otherdomain.com/

test.php的

   <script>
    $(window).load(function(){
            var url = "http://otherdomain.com/post.php";

            $.post(url,{id : "12", name : "John"}, function(data)
            {
                alert("It worked!");
            });
    });
    </script>
  

更新

我现在改为以下设置。我有两个名为SEND.PHP和PROXY.PHP的文件。我将来自SEND.PHP的请求发送到PROXY.PHP,PROXY.PHP将实际请求发送到OTHERDOMAIN.COM。当我现在执行SEND.PHP(意味着我按下按钮)时,我总是得到结果“错误:403 Forbidden Access”。

SEND.PHP

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $.post("proxy.php", function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>
</head>
<body>

<button>Send Data</button>

</body>
</html>

PROXY.PHP

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://otherdomain.com/data");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"name=Jack&age=23");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

if ($server_output == "OK") { echo "It Worked!"; } else { echo "Error: " . $server_output; }

?>

2 个答案:

答案 0 :(得分:2)

您必须使用代理文件才能避免相同的原始策略限制。 在proxy.php中,您可以通过CURL或其他HTTP库向otherdomain.com发出请求。通过JavaScript调用代理文件,而不是直接调用otherdomain.com。

答案 1 :(得分:0)

不,Javascript中的相同原始政策没有解决方法。这是一项安全功能。但是,如果您可以访问其他域,则可以使用PHP中的CURL完成类似的操作。