知识卡片
防盗链是性能与安全的博弈:防护强度应与资源价值成正比
内容
防盗链的三种常见手段呈现出明显的递进关系:基于HTTP请求头referer信息判断请求来源,实现简单但极易被绕过(一些防火墙会清空referer,curl/wget等工具也能随意伪造),只适合保护带宽价值较低的资源(如网站logo);动态URL防盗链让资源的URL在特定时间或特定请求后失效,安全性更强,但需要动态页面和后端服务器配合生成和校验,不适合大规模资源分发;动态参数或cookie防盗链是目前使用较多的方案,根据用户信息、时间戳等动态生成请求参数,服务器端按同样规则校验合法性,安全性更高但实现和维护复杂度也更高,规则本身仍有被破解的可能,需要配合日志分析持续升级算法。书中的结论是防盗链本身并不难,难的是”设计规则的合理性,要兼顾性能和安全,切忌杀鸡用牛刀”——这是一条对任何安全防护机制都适用的通用原则:防护手段的强度应该和被保护资源的实际价值相匹配,用最复杂的方案保护价值很低的资源,只会白白增加系统的性能开销和维护成本,防护强度和资源价值应该成正比而非一律拉满。
参考来源
- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.3 CDN对流媒体和应用分发的支持及优化"节,"7.3.3 防盗链"(源文件:_epub-src/OEBPS/Text/Chapter7_3_4.xhtml)
- 结论依据:原文说明"通过上面的介绍,可以将资源分为2类来对待:带宽价值较低的资源……另一类就是带宽价值较高的应用、多媒体文件等。对于不同价值的资源,防盗链的方法也越来越高级,越来越复杂……所以防盗链本身不难,就是需要设计规则的合理性,要兼顾性能和安全,切忌杀鸡用牛刀",直接支撑本卡片结论。
- 原始内容:通过上面的介绍,可以将资源分为2类来对待:带宽价值较低的资源,例如网站logo图片、JS脚本等资源;另一类就是带宽价值较高的应用、多媒体文件等……所以防盗链本身不难,就是需要设计规则的合理性,要兼顾性能和安全,切忌杀鸡用牛刀。