在 HTTP 请求中了解引用者/引用者的安全方法是啥?

Posted

技术标签:

【中文标题】在 HTTP 请求中了解引用者/引用者的安全方法是啥?【英文标题】:What is a safe way of knowing the referer/referrer in an HTTP request?在 HTTP 请求中了解引用者/引用者的安全方法是什么? 【发布时间】:2012-07-27 04:40:08 【问题描述】:

我正在使用nodejs编写一个图片上传服务。付费客户将能够将图像文件发送到我在服务器上设置的端点。但是,当每个请求进来时,我需要确认它实际上是一个付费客户发出请求。我想过让客户给我他们的域名,我会检查引用标题。但是,有人可以轻松地欺骗引荐来源标头并使用我的服务而无需付费。 SaaS 开发人员如何面对这个技术问题?是否可以在不要求我的客户拥有一些服务器端代码的情况下解决此问题?

【问题讨论】:

这种工作不要依赖客户端。 OAuth 怎么样? 【参考方案1】:

您无法使用引用标头对浏览器进行身份验证。

如果您想对个人进行身份验证,那么您可能需要一个登录系统,他们向(用户名/密码)提供凭据,并根据您允许的用户群检查这些凭据。如果他们通过了,那么您在浏览器中设置了某种类型的 cookie,表明他们是合法用户。该用户的后续请求将包含该 cookie,您可以检查每个请求。

cookie 必须是您创建的、您可以验证且不易被猜测或伪造的东西(例如会话或来自您服务器的加密令牌)。您通常会在一段时间后对 cookie 设置过期时间,以便用户必须再次登录。

【讨论】:

同意。有一个名为 OAuth 的免费开源框架可以为您完成大部分工作:oauth.net。这是您可以使用的 javascript 代码的链接,因为您在问题中标记了 Javascript:oauth.googlecode.com/svn/code/javascript【参考方案2】:

您是在为网站构建外部图像托管服务,还是要共享 必须 私密且 安全 的内容?如果是前者,请继续阅读。

当然,标题可以被欺骗。这就是您不必担心的原因:

    替代方案是丑陋的:要构建安全的供应服务,您必须开发某种令牌系统,网站所有者也在他的最后实施。很有可能,他不会和你签约,因为有更简单的选择。

    必须在客户端进行欺骗。很少有“用户”会真正做到这一点。两个极客在他们自己的机器上欺骗标题不会对你有很大的影响。如果他们编写了一些代理或中间件来自动完成这项工作并且许多人开始使用它,那么这可能是一个问题。然而,这不太可能。

猜你已经知道了,但由于你没有提到 - 它被称为Hotlinking。谷歌此主题以查找更多资源。

【讨论】:

以上是关于在 HTTP 请求中了解引用者/引用者的安全方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 获取请求引用者

有没有一种简单的方法可以在 Symfony 2 中替换引用者中的 url 参数?

如何在 ruby​​ 中获取 IP 地址、引用者和用户代理?

通过引用者发送位置哈希

如何在 Python 中使用引用者和 href 查找 url?

YouTube API v3 和 php 返回“请求未指定任何引用者”