【问题标题】:How to determine if it's mine client accessing my server?如何确定是否是我的客户端访问我的服务器?
【发布时间】:2014-01-28 15:34:44
【问题描述】:

假设我们有一个客户端-服务器应用程序通过网络进行通信,客户端是用 javascript 编写的(几乎是开源的)。例如,我们想在浏览器内运行多人游戏并从广告中获得一些收入。我们希望继续开展业务,因此我们确保处理大部分逻辑的服务器部分的安全,并且我们接受前端/UI 处理客户端被扔到野外并且可能被任何人弄乱。

问题是:如何检测和防止有人复制 Web 应用程序的所有面向公众的内容,包括 JS 客户端,将其与他/她自己的广告、潜在的恶意软件等放在他/她自己的服务器上,而“被劫持的客户端仍然与我们原来的服务器通信?

或者也许这很愚蠢,并且有一些明显的原因导致这种行为不起作用(这可能就是我没有发现任何人提到它的原因)?我觉得我在那里遗漏了一些东西,但到目前为止,我的经验没有告诉我上面段落中的假设情况对于劫持者来说是不可能的,甚至是有利可图的。

【问题讨论】:

  • 查看请求来自哪里...
  • 客户端如何与服务器通信?在大多数情况下,同源策略已经阻止 other-domain.com 上的 JS 与您的服务器通信,除非您故意解决这个问题(CORS、JSONP ...)

标签: javascript security client-server client


【解决方案1】:

您无法真正阻止人们使用您的客户端连接到他们自己的服务器。长期以来,MMORPGS 已经完成了这项工作,即使他们编译了胖客户端也是如此。当然,在这些情况下,人们不得不从头开始重新编写服务器代码。

为防止人们屏蔽您的广告,您可以在投放广告时为每个客户设置一个时间戳。如果客户端仍然处于连接状态,但一段时间内没有向服务器请求新广告,则各种事情都可能出错 - 例如,您的服务器可能会修改该玩家的骰子掷骰,因此他会在除了最简单的怪物。这是在你的服务器代码中,所以不能乱来,复制你的代码的人很快就会用完玩家群。

关于这种方法的重要一点是不要给客户任何线索,以及为什么它在流氓名单上。不知道要修复什么使攻击者更难“修复”更改的代码。

【讨论】:

  • 那么是什么阻止了他们隐藏广告。 ;)
  • 如果他们只是像广告拦截器那样删除广告,或者更改广告代码以从其他地方读取广告,则原始服务器将不再获得 eequests。将其移出屏幕效果会更好,但攻击者从“将广告移出屏幕”中获得的收益比“展示他自己的广告”要少得多。你不能真正阻止一个坚定的攻击者弄清楚一切,但你可以尝试降低他的挫败感/收益比。
  • 很少有好主意,但您正在考虑不同的问题:有人重写服务器本身而不是使用来自其他来源的我的。不过为传说点赞:)
【解决方案2】:

我会把我的评论变成答案。该请求有一个引荐来源网址,您可以根据引荐来源网址进行验证。当您从 different services 请求 api 密钥时会发生这种情况。

【讨论】:

  • 好点。那么,引荐来源网址欺骗的问题有多大? en.wikipedia.org/wiki/Referrer_spoofing
  • 如果用户通过他们的服务器推送请求并更改引荐来源网址,那么您将无能为力。您可以在代码中实现许多其他“黑客”,但如果人们想绕过您的东西,他们会的。
  • 我想这是最好的,没有灵丹妙药:)
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2014-05-05
相关资源
最近更新 更多