【发布时间】:2020-12-14 04:01:44
【问题描述】:
我有一个用户在域 A。当他们向域 A 发出请求时,我希望域 A 与域 B 联系。一旦请求到达域 B,我希望域 B 访问用户的 HTTP Cookie 在域 B 上而不在域 A 上。这可能与 CORS 相关吗?
所以重新散列。
- 用户访问
www.example.com - 一个跨域请求来自
www.example.com->www.example.net -
www.example.net检查 HTTP Cookies ONwww.example.net而不是www.example.com的请求用户。
显然开箱即用是行不通的。我正在寻找可行的安全解决方案。
这里的想法是我同时拥有www.example.com 和www.example.net,并且我想在用户访问www.example.com 时登录到www.example.net 数据库,前提是他们在www.example.net 上设置了特定的HTTP Cookie。
更新
我在测试服务器端脚本上设置了 CORS(www.example.net 用于本示例):
<?PHP
header("Access-Control-Allow-Origin: https://www.example.com");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 60');
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
// may also be using PUT, PATCH, HEAD etc
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "Cookie Dump: \n";
echo print_r($_COOKIE);
而在客户端www.example.com 上,我只是使用fetch API:
<script>
fetch("https://badge-dev.myfreecams.com/codex/auth.php", {
method: 'GET',
credentials: 'include'
}).then(data => console.log(data));
</script>
没有任何 CORS 错误。如果我直接在浏览器中访问服务器端脚本,我会看到客户端 HTTP Cookie 的正确转储。但是,当 www.example.com 被加载时,它们不会被转储。这意味着我无法在我的服务器 www.example.net 上做我需要做的事情,因为 $_COOKIE 数组是空的。
【问题讨论】:
-
你试过 iframe 吗?
-
在
example.com中生成一个动态 iframe,其中包含 src 到example.net并附加到正文中,然后您可以访问example.netcookie -
@Lessmore 我需要更多信息才能对此进行测试。
-
尝试阅读有关 Access-Control-Allow-Origin 的信息:* dev.to/lydiahallie/cs-visualized-cors-5b8h 我们在我们的服务器 nginx(或 apache)上进行了此配置
-
您尝试过我的解决方案(iframe)吗?
标签: javascript php http cookies cors