«

»

Jun 06 2019

被 RSS 订阅给攻击了

连 inoreader 都疯了,我还能说什么好呢。

可能近期有不少 RSS 订阅用户都从我这里收到了大量的这样的订阅:

attack_on_feed

因为我写了个脚本,对于疑似攻击行为,每次攻击都返回一条新的 RSS 订阅。

实际上是因为我检查了这两个月的 HTTP 请求,发现了几个流量大户。而这些流量大户中,网络攻击竟然连 1/10 都占不上。主要的流量大户都是 RSS 订阅器。也就是说,如果你的订阅器疑似攻击,就会收到这样一条订阅。你收到了多少条,就意味着短时间内订阅器扫了多少次。

鄙站是有什么值钱的玩意,值得这些订阅器 10 分钟扒一次?

两个原因

WordPress

首先说一个 WordPress 自身的问题。当然,这个其实是次要的。

WordPress 自身的 Feed 输出,默认 updatePeriod 参数是 hourlyupdateFrequency 值为 1

也就是说 WordPress 默认为站长平均每小时更新一篇文章,而且没有可以配置的地方。唯二的修改方式就是修改源码,或者修改 function.php 。后者方法安全一些但是实际难度却比前者大太多。

WordPress 你是默认把所有人都当成是垃圾新闻站长了啊。

因为这个,守法的 RSS 订阅器看到这个配置之后,会认为需要每个小时扫一次 Feed 检查是否有更新。

当然,在 Google Reader 还活着的那个年代,人家才不鸟你这配置是如何呢,就这种程度的博客,三天扫你一次就算给你脸了。不过个人博客更新频率也不频繁,一周内有人读就算不错了。

Google Reader 死后仍有很多在线订阅工具后继者继承着这个传统,不是根据 updatePeriod ,而是根据博客自身的更新频率来自行判断是否有必要去扫 Feed 。一方面减轻在线订阅网站的压力,另一方面也可减轻被订阅博客的压力,一举两得何乐不为。技术上很容易实现,而且如今微博头条等垃圾推送集散地这么多,应该也不会有人专门用 RSS 订阅器去订垃圾新闻站吧?

当然在如今用户体验一分不值劣币种族灭绝良币的二十一世纪一零年代末期,谁他妈的管你是人是狗。各个大爷要的是 绩效 ,管你博客什么设置,爷就10分钟一扫,只要你敢更新,分分钟就刷新列表。爷有得是流量!流量没了多插点广告爷就又有钱了。

连 inoreader 都疯了,我还能说什么好呢。

丑陋而疯狂的 script kiddie

对于 script kiddie 的态度,本来是想写一篇文章专门批判的。然而,写博客救不了,啥都救不了。

所以我对于 script kiddie ,线上事之以冷暴力,线下行之以拳打脚踢。为这种人,写一个字都浪费。

自从 Google Reader 嗝屁之后,国内一直没有可靠的 RSS 线上订阅工具。以前有一句:“你把饭店关了,难道我们就会去吃屎吗?”如果以用脚投票的观点看结论的话,选择更偏重娱乐的的人还挺多的。继续坚持写博客和使用 RSS 订阅的人骤减,而且 还津津有味特有道理

script kiddies 不这样,script kiddies 不仅掩盖着自己的选择,还一边上各种工具。问题是做出这些工具的吃得有滋有味。

有两个需要提一下订阅器:Tiny Tiny RSS 和 Winds。

这两个看起来就是目前使用比较多的自建 RSS 订阅器,也是两个攻击性很强的流量大户。最狠的时候几秒钟扫一次,一个月能扫掉 6G 左右的流量,简直就是在比谁先破产。你是 99元 秒杀了个云主机不用就落灰不糟蹋白不糟蹋,我可是正经花了钱建站写博客一分钱不赚的。

纳闷

“把饭店关了,就会去吃屎。”这个观点我曾是不认同的。

从 1999 年起 RSS 就存在了,当年根本不会有哪个大厂敢做 RSS 在线订阅和在线阅读,大家都是从本地订阅工具开始起步,想要阅读的时候点击更新就好了,也完全没有必要定时去刷新(唯一需要定时刷新的情况就是在你两次阅读间隔下,Feed 更新的文章数量超过了其支持的数量,比如很多商业化的博主更希望你去看他们的广告,而不是离线订阅)。即使到如今,仍有很多本地化的订阅工具,尤其是 Office 重度用户们,你们电脑上的 Outlook 就是支持 RSS 订阅的。

可能就会有不少用户开始嚷嚷手里没有电脑,只能靠手机。你咋这么矫情,什么事都得伺候到嘴边?

……

现在我认同了。

35 comments

Skip to comment form

  1. 灰狼

    只要博客流量还够用,我就不看流量日志,一旦不够用,就得去看到底是哪个谁消耗了我的流量。
    之前有人反馈说我的博客对于RSS更新不及时,不清楚是RSS订阅器的问题,还是博客程序的问题,没理会。
    按你的分析,如果都疯狂去扫的话,跟程序是没多大关系,反正拿到个地址就是扫。

    1. 石樱灯笼

      这次相当于DoS,而且请求的还是合法地址。
      RSS 上除了 updatePeriod 之外,在 HTTP 请求头上还有缓存属性,如果开了 CDN 的话,CDN 会根据这个属性进行缓存的,所以会出现更新不及时的现象。话说真有人关注 在线RSS 的实时性?

  2. 心灵博客

    扫得太频繁确实可恨。
    服务器上限制下频率吧,比如同ip两小时内只能访问一次,超过了就直接403,实在扫得太频繁的直接ban

    1. 石樱灯笼

      这种硬限制很容易冤枉本地订阅器,在用户体验上就输了。

  3. 老杨

    抱歉,我最近刚用上 TTRSS,不过我是默认的30分钟更新一次,前几天看到提示,刚改成一天更新一次……Feed 静态化会不会好点?https://www.ludou.org/wordpress-feed-static.html

    1. 石樱灯笼

      你觉得静态化的意义和效果是什么?不要用猜的,说实力理论。

  4. 大致

    看日志的时候各种RSS工具确实是群魔乱舞。TTRSS和Wind默认的设置好像都不过分吧。
    我设置的是每5分钟多少次吧,超出一律ban,24小时内ban3次的就进黑名单了。
    现在感觉回头用单机的RSS工具挺好的。

    1. 石樱灯笼

      如果默认设置不过分,哪来的这么多10分钟一扫的IP。

  5. Yan

    好奇inoreader一个月消耗你多少流量?

    1. 石樱灯笼

      大约几个G,没有仔细算。

      1. 老虎

        算了呗,多充点流量,不然读者的订阅多差啊

        1. 石樱灯笼

          在这劣币驱逐良币的市场当中,你这是劝我向劣币低头啊。

          1. 老虎

            这,看你咋看这个问题了,是要读者还是要立场……

      2. 静水流深

        你一个月流量要花多少钱?现在流量没那么贵了吧?innoreader没办法加长扫描时间,只有缩短时间的选择,默认一小时扫一次,不算频繁~

        1. 石樱灯笼

          为了研究这破玩意,我还专门注册了 inoreader的账号。
          结论是:界面上手动设置的那个参数是假的。
          这篇文章我没描述任何关于各浏览器的行为,但没写不意味着我没研究。
          开头都说了:连 inoreader 都疯了.

  6. 法律派

    确实是之前你博客不停的报受到订阅器的流量攻击。
    我就是用的innoreader。不知怎么弄。

    1. 石樱灯笼

      Inoreader 疯了,如果还这样我只能封了。

  7. Sam.Z

    更新完全可以手动,或者每次登陆的时候更新,现在这些web reader真的太主动

    1. 石樱灯笼

      手动更新这个前提是每个用户的订阅都独立保存在其账号下,实际上 Web Reader 自己维护一套订阅更新体制,理论上可以节省相当大的存储压力。
      当然实际上,即使再好的工具,使用方法不正确的话,依旧会造成相当严重的问题。

      1. Sam.Z

        inoreader 和 feedly 都有商业版的,个人付费了就应该给客户自己选择更新方式,然而并没有,所以托管服务商就是为了赚钱,它才不管你rss源头网站的流量压力,作恶。

  8. Mr.Chou

    我的16G流量每个月用不到3G,可以忽略攻击的问题。

    1. 石樱灯笼

      这么少么?我光是图床的流量就已经超过3G了,而且图床服务器没有被盗链和攻击,都是正常流量。

      1. 老虎

        https://talk.synyan.net/14825
        这个方法能不能解决一部分问题?

        1. 石樱灯笼

          More 标签和摘要模式意义一样。可以降低一些压力,但是意义不大。

  9. 哥斯拉

    看来博主博客的流量很大

  10. 雨宫恋叶

    哎呦。
    你觉得 RSS 的正确使用(和理解)方式是?

    (我曾经用过 Nextcloud News,但是因为订阅源也不常看,订阅全删了)

    至于最后一段的现象,我想分析,但是不知道会不会存在结果。

    1. 石樱灯笼

      新加坡的那个vultr服务器不会就是你的吧?

      1. 雨宫恋叶

        不是。
        事实上我自己没有搭建服务器。

        1. 雨宫恋叶

          这里我说明一点:
          我其实没有订阅你的博客。

  11. GlacJAY

    赶紧看了看我用的 BazQux Reader,其帮助里有写他们的更新策略:


    How often feeds are updated?
    Refresh rate depends on the time of the last article in feed: few hours ago—each 15–45 minutes, less than a week—each 1–2 hours, less than a month—each 2–3 hours and 3+ hours for others. Feeds that support PubSubHubbub are updated in realtime.

    嗯……看来最快是 15 分钟一次?而且没得改。希望没有对你造成太大的困扰😂️

    1. 石樱灯笼

      文章里其实忘记写了,除了 updatePeriod 之外,RSS 还有 HTTP Header 会声明是否需要更新(依靠Cache-Control),这些本来都是 HTTP 的基础知识,不过现在都被当做狗屎了。

      1. GlacJAY

        反过来想的话,是不是因为这些在线订阅服务为了能处理各种各样的订阅源,而并不是所有的订阅源都能正确实现这些信息的输出(毕竟 RSS 式微嘛)(比如你提到的 WordPress 就没有正确输出 updatePeriod),所以更方便和统一的实现方式就是直接无视了😂️

        另外,按照你现在的实现方式和 BazQux Reader 的更新策略,万一真的触发了那条假的文章,那岂不是就会进入负反馈的恶性循环中跳不出来了?😂️

        1. 石樱灯笼

          为了原则牺牲利益,还是为了利益牺牲原则。

          1. GlacJAY

            好吧,只是觉得你现在用的这个策略有点儿两败俱伤了,而我作为订阅用户又没什么能做的😂️

          2. 石樱灯笼

            我这么做或许只会伤到那些无耻的订阅工具,然而我也并不是其主要盈利渠道,所以伤点毫毛跟无伤有何区别。
            或许会伤到订阅用户,但用这种工具的订阅用户本身就是极为轻度的,完全不会在更新时来阅读。
            或许会伤到自己,没觉得。
            所以没伤害到任何人。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据