设想:
客户端网站只有在用户将安全卡插入 PC 时才能访问。ClientWebsite 不在我的控制范围内,使用安全卡所做的一切也是如此。
我开发了一个需要用户名/密码的 js Web 应用程序。系统请求一个安全令牌,如果提供的凭据有效,则返回一个令牌并将其作为 url 参数附加到所有请求。令牌有效期为 60 分钟。
ClientWebsite 的系统管理员想要在他们的安全站点上放置一个指向我的 js 应用程序的链接。如果有人能够查看 ClientWebsite,他们就可以查看我的 js 应用程序,并且在点击链接后,应该不必再次登录。
我让系统管理员插入了一个测试链接,该链接将指向我们服务器上的一个页面并执行一些 js/jquery 来检索 http 引荐来源网址,但它始终是空白的。结论——我们客户的浏览器可能禁用了referrer,或者ClientWebsite 的配置方式禁用了发送referrer。毫不奇怪,至少可以说这是一个非常安全的网站。
在离开 ClientWebsite 之前通过 ajax/php 请求安全令牌很容易(我会向系统管理员提供代码以放入 ClientWebsite)。此方法将在 php 脚本中使用硬编码凭据,将令牌返回/附加到链接,以便在到达我的 js 应用程序时可用。然后 js 应用程序将检查令牌的有效性,如果确定,则在 js 应用程序上禁止登录。
问题:
有人可以 c/p 来自 ClientWebsite 的 ajax 调用,在 ClientWebsite 之外运行它,获取令牌,将令牌传递给可以使用它访问我的 js 应用程序的其他人。
问题:
我想在 php 脚本中检查引荐来源网址,然后在引荐来源网址与 ClientWebsite 匹配时发出令牌,但没有发送引荐来源网址,并且引荐来源网址无论如何都可能被欺骗。我可以使用什么其他方法来确定令牌请求实际上来自 ClientWebsite 页面?
谢谢!!
编辑:
为系统管理员提供 ajax 调用,如下所示:
$('#jsAppLink').click(function(e){
e.preventDefault();
var currentHref = $(this).attr('href');
$.ajax({
"type":"post",
"dataType": "jsonp",
"url": "https://mydomain.com/getTokenUsingCurl.php",
"success": function (returnData){
newHref = currentHref + "?token=" + returnData.token;
window.location = newHref;
}
})
})
onClick,我服务器上的一个 php 脚本被查询。该脚本包含硬编码的凭据。脱离公众视野。将令牌返回给 ClientWebsite,将其附加到 js 应用程序 url,然后继续链接单击将用户路由到 js 应用程序。