盗站与采集,分析及反制之术PHP实现

优采云 发布时间: 2020-08-12 11:34

  一般的说,只要做过站长,大概都不会不知道文章采集这档子事吧?

  网站小偷,正式接触还是不久前的事,其也流弊,稍加配置,一个功能不错、资源丰富的网站便属于自己了…………。

  这是网站站长们的便利,也是站长们的困扰,更是Web2.0时代诸多编辑者的苦闷、无奈、甚或愤怒吧?

  被容许的合法采集是正常的,那是一个十分便利的工具(我就常常用),但未经同意的滥采却极大的严打了诸多热心创作的Author们的心……

  其实比较早就关注对普通网页内容的处理,因为https的非对称加密开支过大,而且国外也不常用——既便是须要一定安全性的网站。刚好,发现经过简单的处理,可以非常彻底的解决盗站和非法采集的问题(如果容许他人采,不用本技术就成了)。

  写了个程序包,用法可以从其中的test.php中了解,程序反制的剖析和设计在doc/design.txt中有说明。发下来,共享了.........如果你在使用中发觉Bug,又乐意告诉我的话,可通过邮箱联系,或者在这里留言也行。谢谢

  附上设计说明,以便捷不能下载文档的同事。

  

  简介:

  盗站程序,即通常所谓网站小偷程序,是通过剖析目标网站的Html源码,采用查询和

  替换的方法,偷梁换柱泄露目标网站主体内容的一种程序。

  网站采集,顾名思义是指对目标网站上的文章、图片、flash等内容进行采摘的一种

  行为,采集程序可以使这些行为实现自动化和批量处理。因为资源须要共享,这种高

  效的采集行为广泛存在于许多网站上。但同时,负面的作用是并没有一种有效的方式

  可以制止未经同意的非法采集。

  针对前面两种程序的行为,通过剖析其工作原理,运用巧妙的设计,本程序有望解决

  这一常年存在的问题。

  ----------------------------------------------------------------------------

  工作原理:

  按:工作原理的设计是根据目标问题的具体情况而至,所以假如希望明白为何要采

  用这样的方式,可参阅前面关于盗站和采集程序的原理说明。

  1、在浏览器恳求指定的正文时,服务器端对文章内容进行异化处理(加密),浏览

  器接收后,由Javascript恢复(解密)并显示。

  2、解密秘钥是与正文一齐传送的,所以必须对秘钥进行“隐晦”构造,使得目标程

  序(即盗站和采集程序)难以定位并取得秘钥。

  3、密钥中必须附带有原创网站的唯一性标示信息,使得假如文章不是直接浏览自原

  始网站,Javascript中的揭秘就是错误的(即文章无涵义)。

  4、作为选项,可加入用户浏览时揭秘操作的行为风波。

  即:用户按照页面的提示输入验证钥或仅仅触发特定的操作,Javascript的揭秘

  才有效。同时,可加入干扰操作,如果干扰操作被触发,密钥也会失效。

  其中:

  第1条:是必须的基础;

  第2条:对抗了采集(目前的采集程序尚无法深度处理Js代码);

  第3条:对抗了盗站。

  第4条:如果将来采集程序实现了深度处理Js的能力,此可对抗。

  设计要点:

  1、异化和恢复处理的算法必须非常高效。

  2、接口应当足够简单,要才能用在支持服务器端脚本语言的模板中。

  ----------------------------------------------------------------------------

  设计参考:

  >>加密算法

  服务器端(PHP)和浏览器端(JS)的算法是等同的。

  考虑效率,仅对文字进行处理。

  算法:采用对原创字符串中字符进行交换移位的方法加密。

  效率:Js环境中直接支持Unicode,所以效率比较高;服务器端的PHP因为不直接支持

  国际化,所以须要预先转换到UTF-16(iconv)。

  >>密钥构造

  实际用于加密文本的秘钥由“主秘钥”和“验证钥”合成。

  主秘钥是由一个标示串(标识原创网站)和一个随机宽度的随机字符串联接而成。

  验证钥是一个分辨大小写的随机字符串,类似验证码(默认4个字符,可设置)。

  主秘钥与验证钥的合成采用“洗牌”算法,验证钥相当于几次抬牌。

  网站标识串要惟一地标示原创站点,并且它不能直接存在于Js中——应该由Js手动获

  取,可以采用域名和URL组合构成:

  Js端: document.domain、document.URL 中截取;

  PHP端:$_SERVER['SERVER_NAME']、$_SERVER['REQUEST_URI'] 中截取。

  所以,在Js端,主秘钥须要执行一次eval(或Function()一下)才能获取!

  因为这段Js代码有很过显著的特点,所以必须用一个简便的算法变型这段代码。使这

  段代码也具有随机字符串的特点。这样就达成了“隐晦”构造的目的。通常情况下,

  对二次变型的解码只会执行一次(或者极少),所以其执行开支基本可以忽视。

  上面的描述看似复杂,其实就一个重点:用几种必要的技巧,隐藏参杂在源码中的密

  钥,使得秘钥不可能通过剖析手动获得。

  这种设计是本程序包的核心所在,否则无法彻底达成目的。

  >>用户参与

  如果采集程序集成Js引擎,对于采用“直接揭秘浏览”用法的网页,[url=https://www.ucaiyun.com/]采集器[/url]可以用Js

  引擎预先执行一次,得到正常数据后再剖析。

  加入用户参与的机制(事件触发或输入验证钥),是借助了更为随机的用户操作诱因。

  如果是由用户输入验证钥,则彻底断掉了源码中Js程序的内部关联,使得手动操作根

  本不可能。

  当然,让用户参与进来并不界面友好,用户参与度怎样,取决于防盗防采的重要性。

  或者,巧妙的“参与”设计可以很大程度弱化这些不友好?

  >>执行流

  本程序可以嵌入仍未采用该技术的网站系统中。

  对于采用模板的网站,在模板中:

  采用之前:文本数据 --- 容器中显示

  采用以后:截取数据 --- 加密、变量储存 --- 容器中Js形式显示

  对于直接硬编码的系统,需要在程序代码中作类似处理。

  加密-Js构造(PHP):

  >> 创建管理器对象(T2box),获取加密密钥;

  >> 用该密码加密文本;

  >> 密文形参到Js变量;

  >> 输出Js代码:基本代码、变量形参、启动、干扰、显示等。

  解密-显示(Js):

  >> 获取验证钥;

  >> 启动函数解码生成揭秘秘钥;

  >> 解密显示Js变量中的文本。

  >>利与弊

  由于加密了实际的文本数据,所以搜索引擎对页面的剖析会是一个问题,但在目前

  已存在各类SEO技术的情况下,这基本可以不成为一个问题了。如可以在页面

  中收录关键字、简介,或直接插入一个收录关键字或页面简介的层等。

  ----------------------------------------------------------------------------

  小偷程序原理:

  小偷程序通常是直接恳求原创网站的内容,然后替换掉页头标志性内容,页尾的版权

  信息,以及一些广告等。或者单纯截取原创网页中对自己有用的数据作为自己网站的

  资源,同时自身提供可订制的页头、页尾、广告等控制。从而实现窃取网站的目的。

  它有一个缺点:如果原创网站改版,则需重新剖析网站代码,改写程序。

  这样的程序通常很简单,代码量较少,不过也禀性这么,相对于原创网站改版的风险,

  它的成本才是可接受的。

  (在本程序中,内容页里的文本被变型处理,所以信息也不能直接“截取”采用——

  “截取”做的是减法,“替换”是做加法)

  采集程序原理:

  采集一般是首先针对某个有文章内容页链接列表的页面,分析提取出有用文章页的URL,

  然后剖析文章页面的源代码,提取出标题、正文、作者、文章来源等信息。

  文章页URL列表的获得可以有多种方式:如列表页剖析,手工录入,批量生成等。在这

  方面做得比较好的有优采云采集器(我就常用它),所以在文章列表页中做反采集的设计

  意义不大。真正要反制采集,还必须从内容页上着手。

  

  ※ 在inc/global.php中可以更改全局配置。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线