CORS购物车 - 安全问题?

时间:2017-07-17 11:29:57

标签: php jquery session cors cart

我已经阅读了很多内容,因为我想在不同的域上启用不同的商店,以便将文章(和预订)添加到一个全球购物车并执行单个结帐。

对此有很多疑问,这就是为什么我开始思考,我的解决方案真的不安全,因为它看起来确实像魅力一样。我们的想法是使用包括凭据在内的ajax请求调用globalcart.com(添加和检索购物车时。并将所有购物车数据存储在globalcart.com上的会话变量中

似乎很容易维护会话变量跨域(我测试了下面的代码,客户端通过ajax直接访问http://globalcart.com/getsession.php时获得相同的会话ID):

cart-one.com:

<html>
    <head>
        <script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
  <script>
    jQuery(document).ready(function(){
        jQuery.ajax({
            url: "http://globalcart.com/getsession.php",
            crossDomain: true,
            xhrFields: {
                withCredentials: true
            },
            success: function(result){
        jQuery("#ses").text(result);
            }});
    })
  </script>
    </head>
    <body>
        <div id="ses">ses</div>
    </body>
</html>

globalcart.com

<?php
header("Access-Control-Allow-Credentials: true");
if (isset($_SERVER['HTTP_ORIGIN'])) {
    $http_origin = $_SERVER['HTTP_ORIGIN'];
    // using this method because * is not allowed with credentials
    // we could limit this by checking that the http_origin matches a list of domains, but now now
    header("Access-Control-Allow-Origin: $http_origin");
}
else{
    header("Access-Control-Allow-Origin: *");
}

header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies
if (session_status() != PHP_SESSION_ACTIVE || session_status() != 2) {
    session_start();
}
echo session_id();
?>

当然,我会创建一个在服务器端接受的域名的白名单,但在示例中我允许所有域名。

但有任何缺点吗?这种方法的主要关注点是什么?

谢谢!

0 个答案:

没有答案