Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何在跨域重定向上添加头_Security_Authentication_Cross Domain - Fatal编程技术网

Security 如何在跨域重定向上添加头

Security 如何在跨域重定向上添加头,security,authentication,cross-domain,Security,Authentication,Cross Domain,以下是场景: 域a上有一个网页。用户正在域a中获得身份验证,并将身份验证令牌保存在会话存储中,并在其中执行一些活动。然后用户需要转到域B上的页面。一旦他从域B登录到该页面,该页面应该以某种方式保留域A的身份验证令牌。我控制域B的服务器 最简单的方法是在域a的页面上有一个按钮 location.href = 'domainB.com/?authtoken=mytoken' 我面临的问题是: 1我不能也不想在URL中使用查询参数,即使连接是https:URL通常都会被记录,任何攻击都很容易窃取令牌

以下是场景:

域a上有一个网页。用户正在域a中获得身份验证,并将身份验证令牌保存在会话存储中,并在其中执行一些活动。然后用户需要转到域B上的页面。一旦他从域B登录到该页面,该页面应该以某种方式保留域A的身份验证令牌。我控制域B的服务器

最简单的方法是在域a的页面上有一个按钮

location.href = 'domainB.com/?authtoken=mytoken'
我面临的问题是:

1我不能也不想在URL中使用查询参数,即使连接是https:URL通常都会被记录,任何攻击都很容易窃取令牌身份验证,这是一种安全漏洞

2我不想设置跨域Cookie-同样的原因是安全性

3域B应用程序是基于API的,服务器和客户端是无会话的。所有身份验证令牌都位于会话存储中,以防止安全漏洞

在过去的几天里,我在谷歌上搜索了很多次,但似乎我无法为跨域页面加载添加自定义标题“POST”不会重新加载页面。到目前为止,我能发明的唯一选择是放弃使用服务器端会话,即:

a在从域a导航到B之前,请服务器B创建一次性使用的会话密钥

b使用会话密钥的查询参数导航到域b

c一旦域B上的服务器获得带有会话密钥的“GET”请求,检索关联的身份验证令牌,丢弃会话密钥(即有效地使其成为一个计时器),并在页眉中使用身份验证令牌为页面提供服务

这种方法的问题:

它迫使我使用服务器端会话,即性能显著下降

身份验证令牌暂时保存在域B服务器端会话中,这增加了整个系统的安全漏洞

仍然对中间进攻的人开放


还有其他建议吗?其他人是如何解决的?我不认为每个人都在使用这样的安全失败作为URL查询参数。

好的,我自己解决了。解决方案是:获取domainA的页面,包括iframe并从domainB加载带有特殊页面的iframe,然后使用令牌/身份验证信息从domainA上的页面向iframe发送邮件,在当前驻留在iframe中的特殊页面中接收该邮件,并将其值存储在现在属于domainB的sessionStorage中,然后从iframe向父级发送postMessage以通知数据已存储,然后导航到父级中的domainB-一旦加载了主domainB页面,它将在会话存储中包含所需的信息