如何验证请求是否来自您网站上的脚本

How to verify that a request came from a script on your site?

本文关键字:网站 脚本 是否 何验证 验证 请求      更新时间:2023-09-26

我目前正在实现Javascript Facebook登录API。

然后,根据来自 Facebook 的回调响应,此客户端脚本将带有查询字符串参数的请求发送到我们网站上的 URL。根据该 URL 中的电子邮件,对客户端进行身份验证。

这是不安全的。据我所知,Facebook没有返回我们可以验证的其他令牌,并且我们希望根据查询字符串参数中的电子邮件登录用户,并且没有密码。

我想添加另一个查询字符串参数,它为我们提供了某种保证,即查询字符串数据来自 Facebook 响应后的 JavaScript 重定向。

我认为这应该是由客户端脚本创建的某种哈希值,我可以将其与服务器端进行比较。但是,用于创建此密钥的每个资源都可以通过客户端 cookie 或检查客户端脚本提供给攻击者。

是否有一种通用且安全的方法可以解决此问题?

Facebook显然使用OAuth。在不涉及太多细节的情况下(您可以在相关的OAuth和FB文档中找到),OAuth使用您的服务器和服务提供商(在本例中为Facebook)之间共享的秘密进行操作,该秘密永远不会透露给前端Javascript,并用于确认您收到的回调是否真实。

每次对用户进行身份验证时,向 Facebook 传递一个唯一的回调 URL。

此 URL 应包含一些安全令牌,如果存在,该令牌将标识登录尝试的真实性。

您可以在向 Facebook 发送的请求中添加state变量。这将由Facebook返回给您,以验证您的请求。

https://developers.facebook.com/docs/reference/dialogs/oauth/