按流量付费的图片 CDN 如果想坑你是不是毫无办法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nikoo
V2EX    问与答

按流量付费的图片 CDN 如果想坑你是不是毫无办法?

  •  
  •   nikoo 2018-10-09 13:33:55 +08:00 3339 次点击
    这是一个创建于 2569 天前的主题,其中的信息可能已经有所发展或是发生改变。
    个人有一个练手作品,一个采集二手信息的网站,里面有一些物品的图片,之前就存在 VPS 上

    后来由于某图片 CDN 大力宣传加发送代金券,就把新采集的图片上传至该图片 CDN

    网站从未推广,放了几年,最后统计访问量每天几百,没挣过一毛钱

    代金券消耗完后,邮件告诉我欠费了,一看账单近百,
    我就很奇怪,网站明明没有那么大访问量,仅图片为什么能跑这么多流量?

    开始怀疑是搜索引擎爬历史图片,或图被盗用了,所以做了如下操作:
    1、每天通过 API 删除两个月以前图片的定时任务,也就是存在该 CDN 上只有近两个月的图片
    2、最严格的防盗链,referrer 限制为仅唯一本域名可打开图片,none 都无法打开,也就是直接帖图片 URL 在浏览器是打不开的

    本来以为有用,结果网站访问量不见升,CDN 账单破百了。

    我就很奇怪,然后脑抽做了这么一个东西:
    开启 nginx 针对所有图片的 access log,然后写了一个脚本统计每天具体访问图片的 request
    然后针对这个 request 的 response size 统计出一个总流量来
    这样我就知道每天到底图片流量跑了多少了

    结果弄完才意识到,真是脑抽了,我在用高大上的图片 CDN 啊!!!
    它只有一次的请求后就把图片缓冲在它一万个节点里去了,然后再也不会访问我的 nginx 了,它一万个节点不知道哪个节点跑的流量都会跟我算钱,并且我也根本没法统计流量被什么客户端跑走了。

    想了想,非常绝望,图片被它的节点缓冲了,那么是不是它说跑了多少流量就是多少?
    有没有任何方法可以验证真伪?玩的就是一个诚信?
    23 条回复    2018-10-09 15:27:03 +08:00
    mason961125
        1
    mason961125  
       2018-10-09 13:37:57 +08:00 via iPhone
    看下 CDN 的日志?
    0ZXYDDu796nVCFxq
        2
    0ZXYDDu796nVCFxq  
       2018-10-09 13:42:25 +08:00 via Android
    CDN 可以配置防盗链……
    nikoo
        3
    nikoo  
    OP
       2018-10-09 13:43:43 +08:00
    @gstqc 配置了,"直接帖图片 URL 在浏览器是打不开的"
    iConnect
        4
    iConnect  
       2018-10-09 13:44:12 +08:00 via Android
    cdn 都有消费控制的,自己设定下限制。
    0ZXYDDu796nVCFxq
        5
    0ZXYDDu796nVCFxq  
       2018-10-09 13:45:03 +08:00 via Android
    你可以下载访问日志
    coosir
        6
    coosir  
       2018-10-09 13:45:30 +08:00
    服务商是不是可以随便编一些流量出来 - -,反正你没法验证
    0ZXYDDu796nVCFxq
        7
    0ZXYDDu796nVCFxq  
       2018-10-09 13:49:21 +08:00 via Android
    @coosir 你可以下载访问日志
    访问日志和你主站的访问做对比即可
    kslr
        8
    kslr  
       2018-10-09 13:51:32 +08:00
    你那个算什么防盗链

    另外 CDN 去走你流量,明明不管是成本还是法律以及道德是得不偿失的事情,为什么这么多人会相信呢?
    kslr
        9
    kslr  
       2018-10-09 13:52:46 +08:00
    这里明明是技术社区,而大多数人都不知道先看看官方给的资料
    nikoo
        10
    nikoo  
    OP
       2018-10-09 13:55:41 +08:00
    @mason961125 @gstqc 谢谢,搜了一下的确是可以通过开启空间的访问日志来获得日志文件

    这个日志似乎默认是关闭的?

    登录了一下发现:对不起,您的账户已被冻结
    nikoo
        11
    nikoo  
    OP
       2018-10-09 13:57:24 +08:00
    @kslr 请问 CDN 的防盗链不是在 CDN 后台配置限制请求来路来做吗?

    应该用什么正确的办法进行防盗链?
    kslr
        12
    kslr  
       2018-10-09 14:02:01 +08:00   1
    kslr
        13
    kslr  
       2018-10-09 14:03:57 +08:00
    @nikoo #11 但是我看你的网站是公开 cdn 加速,不太适合。我觉得还是从日志下手,分析流量来源到底在哪里
    nikoo
        14
    nikoo  
    OP
       2018-10-09 14:06:30 +08:00
    @kslr 谢谢老铁,我之前真不知道这种防盗链安全机制

    有没有这种安全机制下的站点或者 demo 可以观摩一下?谢谢!
    kslr
        15
    kslr  
       2018-10-09 14:11:17 +08:00   1
    @nikoo 流量稍微大点,基本都有,毕竟国内流量这么贵。不同的只是算法不一样,你可以根据 SDK 简单调用接口。
    https://developer.qiniu.com/kodo/manual/1202/download-token
    nikoo
        16
    nikoo  
    OP
       2018-10-09 14:31:33 +08:00
    @kslr 谢谢

    我并不是想对 CDN 平台做有罪推断

    出现的问题大多可能是由于我本人不认真研究、技术欠佳导致

    综上回复学习到几点来解决该问题:
    1、开启 CDN 访问日志
    2、应用更为严格的 安全机制 - 下载凭证( DownloadToken )来验证每一个图片的访问请求

    第二点实现起来难度大,需要为每次请求页面里的每一张图片生成其独立唯一的 Access Token,运算量有些大
    kslr
        17
    kslr  
       2018-10-09 14:40:44 +08:00   1
    @nikoo 关于第二点七牛不是太清楚,但是边缘计算肯定是趋势,也许会有相映的业务(比如 CloudFlare 的 workers,国内最近也频繁提到)。
    我有一个大概每天 400 万请求的 CDN,每一份资源都依靠 edge 计算,这个算法只需要>5ms,实际上也不过是编辑转发请求。
    Access Token 由后台维护,落地并没有多少请求
    kslr
        18
    kslr  
       2018-10-09 14:44:06 +08:00
    如果真的需要,我觉得可以单独维护 AccessToken,对每个链接签名,有效期 1 ~ 6 个小时等,压力就被分散了。
    其实一台破机器也可以轻松解决,毕竟只是很简单的计算签名
    nikoo
        19
    nikoo  
    OP
       2018-10-09 14:48:48 +08:00
    @kslr AccessToken 有效期 1 ~ 6 个小时?为什么不是 request 的生命周期的时间?我理解有效期 30 秒就够了( 30 秒没返回一般就返回 time out 了)

    难道是要针对客户端+图片对其 AccessToken 做一个缓冲?该用户访问某一图片一段时间内重复使用一个 AccessToken ?
    kslr
        20
    kslr  
        1
    根据文档 https://developer.*.com/kodo/manual/1202/download-token
    定义
    AccessToken 对应 MY_SECRET_KEY
    token 是 url sign
    那么也不需要维护“ AccessToken ”了

    有效期是指如果链接在同一个时间点失效,会把压力集中到一个时刻。
    nikoo
        21
    nikoo  
    OP
       2018-10-09 15:07:29 +08:00
    @kslr 这个"下载凭证"在我理解就是传统的 DRM,但我不太明白怎么实现不维护 AccessToken

    比如两个客户端 A、B 在同一时间点访问同一页面上的图片 /a.jpg

    那么这个 A 与 B 是分别获得了
    A 获得 http://*.com/a.jpg?e=过期时间&token=AToken
    B 获得 http://*.com/a.jpg?e=过期时间&token=BToken

    还是 A 与 B 同时获得一个同样的
    http://*.com/a.jpg?e=过期时间&token=Token

    以上两者应是哪个?
    kslr
        22
    kslr  
       2018-10-09 15:20:40 +08:00
    @nikoo
    因为在文档中“ MY_SECRET_KEY ”是一个固定值。
    这取决于签名计算时带入的变量,比如不同的过期时间 token 也会不同
    yc8332
        23
    yc8332  
       2018-10-09 15:27:03 +08:00
    你要在 cdn 上配置防盗链,而不是你的服务器上。。。还有 cdn 都会有日志的,难道你都不看。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3285 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:48 PVG 19:48 LAX 04:48 JFK 07:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86