【问题标题】:Validate Subscription/Methods Origin验证订阅/方法来源
【发布时间】:2014-11-25 03:17:56
【问题描述】:

我使用DDP tool 对抗crater.io 使用以下命令:

ddp --host crater.io --port 80 subscribe postsList 10

我从我的终端连接到 DDP,所以它真的要爬取整个网站。我可以轻松构建 API 并实时获取数据。我在浏览器之外订阅postLists,它应该被订阅的地方。如果订阅发生在浏览器之外,我想阻止它!

如果订阅使用this.userId 来检查登录是可以的,但是像crater.io 这样的网站不会要求登录来显示最新的帖子,对于某些订阅来说要求登录是没有意义的。

我们向竞争对手免费提供我们数据库的实时更新。

这使得抓取任务变得更加容易,并且您可以免费获得实时更新。 如何检测未从加载整个 Meteor 应用程序的浏览器调用订阅/方法?

【问题讨论】:

  • 你不能,任何东西都可以伪造

标签: security meteor publish-subscribe ddp


【解决方案1】:

你不能,这基本上就是 Meteor 设计的工作方式。

此外,任何可在网上公开访问的内容本质上都是可抓取的。所以这有点像询问如何在线发布页面,但阻止人们使用curl 下载其内容。

【讨论】:

  • 这里的问题不是爬虫而是内存和CPU(Mergebox)因为实时更新。局外人不会每隔 X 分钟/小时通过 DDP 连接一次,他会倾听并获得最新的更新。这在今天可能不是问题,但随着 Meteor 的普及,这将成为一种常见的攻击媒介。我很容易浪费你的服务器,没有 DDP 连接限制。 “足够好”的防御是强制攻击者使用phantomjs(RAM 限制)并加载页面以访问数据。我希望看到千年发展目标能解决这个问题。
  • 哦,好的,所以您说的更多是 DoS 攻击之类的东西。恐怕我对此了解的不够多,无法提供答案,抱歉。
【解决方案2】:

试试这个:

Meteor.methods({
  MySecureMethod : function(){
    if(this.connection.clientAddress !== 'xxx.xxx.xxx.xxx'){
      throw new Meteor.Error('conexão DDP não permitida para esse host');
    }
  }
});

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 2011-03-16
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多