我想让我的应用程序的用户能够在他们的网站上放置一些代码,并通过 jsonp 请求与我的服务器进行最少的交互。但是,我只希望远程请求能够来自我特别允许的远程站点。基本上,用户必须拥有我的应用程序的帐户。
为了安全起见,我的计划是:
- 在允许将代码放置在站点上之前,要存储请求将来自的域。
- 当服务器接收到远程请求时,它会从请求中获取域名并将其与数据库进行匹配。
- 如果域匹配,则验证请求并返回数据等。如果它不同,我将假设它是某种 XSS 攻击并拒绝请求,向远程返回错误。
如何获取请求来自的域?为了在我的开发盒上进行测试,我设置了一个在不同端口上运行的单独静态网站
Server domain: localhost:8090
Remote domain: localhost:8095
使用 getRemoteHost 似乎返回 127.0.0.1。在现实世界的情况下,这是否是远程域的 ip,然后是否有可能从该 ip 中找到人类可读的域名版本?存储和匹配 ip 可能不是一个好主意,因为我不知道尝试连接到我的服务的远程站点是否是从动态 ip 提供的......
也许我在这里采取了错误的方法,所以如果我错了,请纠正我。无法向远程站点的用户请求用户名和密码,因为他们没有实际帐户。
也许更好的方法是将某种加密令牌存储在数据库中而不是域中,当我向用户提供代码片段以放置在他们的站点上时,它可能包含一个隐藏的输入,其中包含此加密版本每个请求都传递的令牌?但是,在这种情况下,是否任何人都无法通过查看页面源来复制隐藏元素并具有对服务器的相同访问权限?