我正在使用nodejs编写一个图像上传服务。付费客户将能够向我在服务器上设置的端点发送图像文件。然而,当收到每个请求时,我需要确认实际上是付费客户提出了请求。我想让客户给我他们的域名,我只需要检查referer头。然而,有人可以很容易地伪造裁判的标题,使用我的服务而不需要付费。SaaS开发人员如何面对这个技术问题?是否可以在不需要我的客户端有一些服务器端代码的情况下修复此问题?
您是在为网站构建外部图像托管服务,还是要共享HAS为私有且SECURE的内容?如果是前者,请继续阅读。
当然,标头可以被伪造。以下是您不必担心的原因:
-
另一种选择很丑陋:要构建一个安全的供应服务,你必须开发某种代币系统,网站所有者也可以在自己的一端实现。很可能,他不会和你签约,因为有更简单的选择。
-
欺骗必须在客户端进行。很少有"用户"会真正做到这一点。两个极客在他们自己的机器上恶搞标题对你来说不会有太大区别。如果他们编写一些代理或中间软件来自动完成这项工作,并且许多人开始使用它,这可能是一个问题。然而,这种可能性不大。
我想你已经知道了,但由于你没有提到——它被称为Hotlinking
。用谷歌搜索此主题以查找更多资源。
您无法使用referrer标头对浏览器进行身份验证。
如果你想对个人进行身份验证,那么你可能需要一个他们提供凭据的登录系统(username/pwd),并根据你允许的用户群进行检查。如果他们通过了,那么你在浏览器中设置了某种类型的cookie,表明他们是合法用户。来自该用户的后续请求将包含该cookie,您可以在每个请求中检查该cookie。
cookie需要是您创建的、可以验证的、不易猜测或伪造的东西(比如会话或来自服务器的加密令牌)。您通常会在一段时间后设置cookie的过期时间,以便用户必须再次登录。