HTTP 引用者限制谷歌 API 密钥有什么意义?

信息安全 谷歌 谷歌应用
2021-08-19 12:41:58

如果有人拥有密钥和有效的引用者,他们可以使用任何客户端的 API 密钥,只要设置引用者标头,对吗?

那么是否值得使用这个限制呢?

4个回答

所有安全措施都是权衡取舍。控制的成本比被保护的价值高还是低,它迫使攻击者做多少工作。

锁上你的行李可能会阻止小偷打开你的包去抓东西,但它不会阻止有人偷你的包。但是成本低,所以它仍然是一种有用的安全控件。

因此,仅仅因为恶意代理可以复制引荐来源标头,他们可能没有时间或意愿这样做。想想一个有效的推荐人标题,比如音乐会腕带。你能伪造它们,或者偷偷绕过警卫检查腕带吗?当然可以,但这并不会使乐队毫无用处。

它增加了攻击者的成本。

同样,您的标准、未修改、行为良好的应用程序将说出它来自的最后一页的真相,然后将正确地拒绝 API 访问。也许有人试图滥用您的服务不知道您正在检查服务器上的引用标头,并且会放弃。

因此,在回答 OP 的问题时,“值得”是只有您可以做出的价值判断。检查推荐人需要多少努力?应该不多吧。保护 API 密钥的使用有多大价值?可能更多。你付出的那么多努力是否值得你为攻击者设置减速带?

最后一个是你的电话。

HTTP 引用者限制谷歌 API 密钥有什么意义?

Web 应用程序在发出请求时不能轻易伪造其引用者。因此,将允许的引用者限制在特定列表中可以防止其他网站将您的 API 密钥用于他们自己的 Web 服务,从而利用您的 API 配额。这是您应该利用的有用功能。

但是,能够设置自己的引用标头的应用程序显然不会受到此限制的影响。它仅用于保护 Web 应用程序。

“referer”由浏览器设置为包含调用站点的地址,因此,如果您通过仅允许您的网站地址来限制对 google api 的访问,您将阻止其他人使用您的密钥从他们的 api 调用网站,因为引荐来源网址不匹配。

“拥有有效推荐人”的人通常不能在他们自己的网站上使用它,因为无法在浏览器中以编程方式修改引荐人标头这可以防止人们简单地窃取您的密钥并将其添加到他们的 HTML 中。

但是绝对可以在服务器上更改引用者,您可以自由更改请求中的任何内容。因此,黑客可以设置某种代理,充当“中间人”,从他的网站接收所有 api 请求,并在将引用者更改为被盗密钥允许的内容后将它们转发给谷歌。

我确信谷歌已经意识到了这一点并且已经采取了一些其他的对策,比如检查有多少呼叫来自同一个 IP 地址。但是随后,黑客可以使用数百个廉价代理来分发呼叫并绕过检查。

因此,总而言之,只要没有人选择花费一些精力来绕过这种保护,referer 标头就是保护您的 api 密钥的一种聪明而简单的方法。随着最近 api 成本的飙升,我认为这很可能会发生。你只需要希望他们不要偷你的。

如果您允许任何人使用您的客户端 API 密钥,基本上就无法防止滥用。这只会让它很烦人,以至于它可能会阻止某些人。启用它并没有什么坏处,但不要以为它会阻止任何有决心的人。这有点像在线视频游戏中的反改装措施。

意见:我见过很多地方,甚至是谷歌云平台,对这个 HTTP 引用限制保证的内容不够清楚:不是很多。