今日头条反爬措施形同虚设,论多平台协同在安全方面的重要性
“ 玩头条练技能。”
大家好,看到标题一定猜到了,我又来玩今日头条了,谁让它是东半球文明的杀时间神器呢。
想当年,头条刚问世,正愁长辈看新闻没合适且方便的工具,虽然不爽头条的自动推荐算法,但还是安利出一个忠实用户。
现如今,头条已成巨头,刚将互动百科纳入囊中,百度百科估计吃不了,若把维基百科吃掉那绝对神奇。
头条系在内容巨头的路上,越走越远,文有头条守江山,武有抖音打天下,多媒体王者得到了4G时代的最大红利,这严重依赖于头条领导系统性建设的眼光。
今日头条,抖音,西瓜,悟空问答,内涵段子,懂车帝…
一系列的产品围绕内容路线组成的矩阵,核心在于内容丰富度,要让用户在头条系统内部消耗每一滴时间。各个产品之间产生的协同效应,肉眼可见。
今天,这里要讲的不是头条产品之间的协同棒棒的,而是,产品内部不同需求之间的协同没有做到和产品一样棒。
虽然现在是巨头相互封闭的时代,但大家如果用心使用一个App,比如今日头条,一定会发现,在一定角度,它们并没有封闭到完全密不透风,它们会努力让你把App里的内容传播出去,为App导流。
这些出口,就是攻破App严密堡垒的基础。不同的平台,不同的应用,不同的开发人员,稍有疏忽,就出现漏洞。
再叠加部署不同功能的不同服务器之间的缺乏沟通,很容易就会导致精心设计的防线形同虚设。
对头条这类内容大佬而言,它的安全,一个重要的方面就是内容安全,既要防止不合规内容的产生,这依赖于数量庞大的审核员产业大军,又要防止内容被扒过度,这依靠的是在爬虫路上设置的重重障碍。
当今主流的操作系统平台,不外乎Android,iOS,Windows,Linux,macOS,在这些平台上,再叠加各种不同的应用,比如微信,各类浏览器等。
这直接导致一个内容app,如果想支持不同的平台不同访问端,就需要对各个平台和访问端进行个性化定制。个性化定制开发人员的最低水平将决定安全水桶的高度。
在本质上,网络安全问题就是人的问题。由于开发者、维护者、使用者能力和项目侧重点的差异,使各个大小单元之间出现协同的不匹配,导致最终出现安全问题。
继续回到头条,虽然号称App工厂,产品开发流水线化,技术先进性相比其它巨头有很大优势。但不可避免的仍然需要对不同访问手段进行定制化开发,这必然会导致短板出现。
在内容安全的反爬方面,头条的一个重要措施,就是各种数值的特征校验,它贯彻得很好,各个平台都在使用,阵型相当统一,再次体现了技术理念的领先性。
上一次,吭哧吭哧地分析的头条signature算法,就是这个特征校验的过程,建议大家看看:
虽然算法分析的文字里已经将算法描述透彻,可以轻易利用起来,但真心的,对这个算法的设计我还是蛮佩服的,它利用了好多种平台特性,对多种爬虫手段例如Selenium进行了检测,看得出开发者经验非常丰富,配得上头条高大威猛的待遇。
技术上,这里继续以今日头条内小视频和西瓜视频为靶子来给大家讲故事。毕竟这个视频占了今日头条APP版面的2/3,看得出这是字节跳动的更广阔未来。
我们先看下头条的视频使用的场景,以便对它有个总体的把握,它可以在APP内、各种浏览器内、微信等社交工具内访问使用,包括Android、iOS、PC等平台,加起来估计有数十种使用场景,当然,各个浏览器及微信等社交工具内的使用,目的是为APP引流。
按常理,这么多使用场景,再财大气粗,也不可能都被重视,对不对?这将必然导致大大小小的安全问题出现。
在只考虑各个单一使用场景,这段签名验证算法应用得很好,都用到了,并且都达到了算法的目的,再夸一次。
夸完了,接下来应该就是批了。
下面来看下用到签名算法的场景。
首先移动浏览器端访问的签名算法:
里面获取的是一个视频的描述信息,例如视频资源id,视频标题描述等。
再看PC端浏览器访问的签名算法:
里面获取的是一些与视频关联的信息。
它们都是由访问视频网页页面时自动触发的。对同一个URL,头条服务器会根据不同的UA参数返回不同的跳转。
移动端浏览器访问的302跳转是这样:
PC端访问的302跳转是这样:
这两个是不同的页面,里面的内容有差异,导致最后需要从服务器获取的关键数据不同。
其中,移动端浏览器需要获取的是一个视频资源的ID,有这个ID,就能获取到视频资源在CDN中的最终资源地址。
这个资源ID在移动端的获取自然是需要使用签名验证算法进行保护的。
但是,在PC端浏览器的页面中,这个资源ID却直接被请求下来了。
两边对同一个数据处理不一致,移动浏览器端被保护的内容在PC浏览器端一点都没有被保护。
这不就相当于没有进行保护吗?
层层安全防护,结果由于各个平台的相互分隔,没能做到数据处理的完全一致,导致安全措施形同虚设。
这白白浪费了好多的资源,都是白花花的银子呀,看着都心疼。
这种由于不同平台的差异,从而实现不同,导致安全出现问题的情况,很普遍。不仅实力强劲的今日头条这样,其它大大小小的公司也一样。
技术上,不分肤色人种,不分派系层次,所有的企业都会犯这个类型的错误。
只能在设计时站高点,尽量避免问题的产生。
安全上,时刻要考虑多平台实现的一致性和协同性。
各位大佬请点击“在看”,留下你的印记↘。
相关文章:

ueditor编辑器和at.js集成
源码: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%//禁止jsp解析${} %> <% page isELIgnored"true"%> <%String path request.getContextPath();String basePath reques…

Java缓存学习之五:spring 对缓存的支持
(注意标题,Spring对缓存的支持 这里不单单指Ehcache ) 从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当…

04-dispatch_group
dispatch_group 实现线程同步 比如说,第一步我想先下载三张图片,然后第二步再去主线程刷新imgview 显示图片。 利用dispatch_group 来进行实现 ,简单来讲就四行代码. 就可以让代码按照你想要的顺序进行发生。 使用步骤 创建一个dispatch_g…
fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 介绍Fiddler的HTTPS抓包功能。” 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启,但解密功能未开启导致,只需要将HTTPS流量解密功能开启就能解决问题。01—作为一款…

如何实现后台向前台传数据
技术交流群:233513714 这两天正在研究如何让后天主动向前台展现数据,只要后台有数据上传的时候就向前台上传(因为公司有个项目,硬件设备会不断的上传数据,服务端将接收到的数据向前台展示)。在网上查了一下,下面将介绍…

05-dispatch_semphore
dispatch_semphore 信号量 dispatch_semaphore信号量为基于计数器的一种多线程同步机制。如果semaphore计数大于等于1,计数-1,返回,程序继续运行。如果计数为0,则等待。dispatch_semaphore_signal(semaphore)为计数1操作,dispatc…

[leetcode]_Integer to Roman
题目:对应之前那道将罗马数字转换整型数字的题目。反过来。 思路:刚开始做的时候,想着用程序进行判断,复杂的要死。网络了别人代码,非常清晰。 代码: 1 public String intToRoman(int num) {2 S…
fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
“ 介绍Fiddler的AutoResponder重定向功能。” Fiddler功能十分强大,既能抓取报文,也能构造报文,本文继续介绍fiddler的功能,这次的功能与构造报文相关,用来回答标题中的疑问,即修改数据的方法,…

nginx基于IP的虚拟主机
知识点: server的语法: upstream语法: upstream中192.168.100.1不是ip只是个标识,只要和下面的proxy_pass 对应即可。 基于IP的虚拟主机: listen和server_name中多加上端口也没问题 listen可以监听在虚拟ip上面 代码&a…

读《人月神话》所感
《人月神话》 读书心得:因为现在还是学生,且没有什么真正在应用项目的开发经验,所以读《人月神话》这本书,与其说是在学习这位计算机先驱的经验,不如说是在了解一个大型软件系统的开发过程以及在开发过程中将会遇到的…
Android逆向之调试smali代码基础
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍Android逆向中调试smali代码的方法。” 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。 本文介绍Android逆向中smali代码的调试及环境的准备。 事先准备如下工具…

Python之路【第五篇】:面向对象及相关
Python之路【第五篇】:面向对象及相关 Python之路【第五篇】:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇面向对象进阶篇其他相关 一、isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 123456class Foo…

关于安卓版的eclipse连接数据库并誓言增删改查
在安卓环境下连接数据库下面是主要代码极其作用: 1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Excel表中的内容是否一致。 并在java里面区别两个对象是否一致 1 public class TheClass {2 …

07-主队列和全局队列
GCD 会主动的提供一个队列供开发者使用。 主队列 系统提供的串行队列 是在主线程执行的队列,所以是串行的队列。任务一个个执行。 dispatch_get_main_queue() 全局队列 系统提供的并发队列 全局队列是所有应用程序都能够使用的并发队列,不需要手动的创…
Android逆向--如何调试smali代码?
最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。 本文介绍Android逆向中smali代码的调试及环境的准备。 事先准备如下工具: Android killer:反编译APK应用为smali源码的工具 Android studi…

python -socket -client
socket client 发起连接。 流程为: 创建接口 发起连接 创建接口参数同socket server相同 发起连接的函数为socket.connect(ip,port) 这个地方的ip与port为socket server端的ip和监听port。 代码示例: # -*- coding: utf-8 -*-This is a testing program …

mysql的binlog太多太大占用了空间的解决办法
现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了 分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘、内存和进程使用的情况,通过top、df –h和free –m来检查,发现磁盘空间满了。…

08-dispatch_apply
1 dispatch_apply dispatch_apply 是按照指定的次数将指定的block 添加到指定的queue当中去。 可以用于快速的迭代 // 获取全局并发队列dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 迭代数组NSLog("begin");NSArra…
记一次知乎维权过程——严肃批评某非法引流商
“ 我的文章被人盗版了。” 首先请关注本号的云技术君的马甲赶快取关,这里不欢迎你,你如果再抄我的文章去干坏事,你全家得新冠肺炎。 文章被盗版,被洗稿,且用来给菠菜党引流,我很生气。 好了,…

《代码大全2》读后感czz
经老师推荐,买了一本《代码大全2》,花了近3个月的时间看完了,看完后觉得还有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。所以,作个读书心得。全书的主题是软件构建,关于软件构建问题的方…

09-dispatch_source
dispatch_source 是BSD系内核惯有的kqueue的包装,kqueue 是XNU内核中发生各种事件时,在应用程序编程中执行处理的技术。 CPU 负荷非常小,尽量不占用资源。 dispatch_queue 和dispatch_source dispatch_source 是可以取消的,取…
如何获取boss直聘搜索牛人被屏蔽的姓名
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 玩玩boss直聘。”最近在用boss直聘,活跃度估计蛮高的。在使用牛人搜索的时候,却遇到了一个问题,就是搜出的牛人姓名是被屏蔽的,让我很是焦虑,虽然知道这种设计是直聘推广…

【Python之路】第二篇--初识Python
Python简介 Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎&…

如何实现phpcms v9_4X版本tag的伪静态?
这两个月来写的文章越来越少了,不是懒,因为太忙了--为客户赶做网站。因为客户指定要使用phpcms v9,还要求使用phpcms v9_42版本实现tag伪静态,在接手的时候phpcms v9_42是最新版本,而现在phpcms官方已经发布phpcms v9_5.X了。对于…
OC对象内存布局
OC对象的内存布局 1 每一个实例对象(Instance)内部都有一个isa指针,指向它的类对象,类对象存放着本对象的实例方法列表和成员变量列表。 2 类对象(Class)内部也有一个isa指针指向元类对象(MetaClass),元类对象存放的事…
连信的protobuf数据格式
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 连信里用到的protobuf结构。”在看本文之前,可以先进行一下回顾,之前已经对协议的框架进行了整体的介绍:连信协议整体框架看了后结合自己的分析过程,应该有个初步的了解。后续会陆续…

fileupload控件在ajax中无法使用
google得到的方法:1。http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspxThere is a better way of doing it with Ajax Control Toolkit version 3.0.30930 which works with .NET 3.5 SP1 and Visual Studio 20…

Cron表达式的详细用法
字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * / 例子:0/5 * * * *…

01-CoreData 概述
CoreData 主要的几个类 1 概述 CoreData 是iOS 3 之后出现的一种数据持久化方案,提供了一种ORM的存储关系,CoreData 是直接将对象存储到数据库中去,也可以将数据库中的数据转化为OC对象,过程中不用编写SQL语句。 2 几个类的讲解…
连信的会话加密密钥协商过程
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍连信会话加密密钥的协商过程。” 公号内之前已经对协议的框架和协议内的数据格式进行了介绍,有需要可以回顾下: 连信协议整体框架 连信的protobuf数据格式 本文对连信的会话加密密钥协商过程进行介绍…