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

2024-03-25 22:58

本文主要是介绍盗站与采集,分析及反制之术PHP实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一般的说,只要做过站长,大概都不会不知道文章采集这档子事吧?
网站小偷,正式接触还是不久前的事,其也牛B,稍加配置,一个功能不错、资源丰富的网站便属于自己了…………。

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

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

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

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

附上设计说明,以方便不能下载文档的朋友。
[code]
简介:

盗站程序,即一般所谓网站小偷程序,是通过分析目标网站的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引擎,对于采用“直接解密浏览”用法的网页,采集器可以用Js
引擎预先执行一次,得到正常数据后再分析。

加入用户参与的机制(事件触发或输入验证钥),是利用了更为随机的用户操作因素。
如果是由用户输入验证钥,则彻底断开了源码中Js程序的内部关联,使得自动操作根
本不可能。

当然,让用户参与进来并不界面友好,用户参与度如何,取决于防盗防采的重要性。
或者,巧妙的“参与”设计可以很大程度弱化这种不友好?

>>执行流

本程序可以嵌入尚未采用该技术的网站系统中。
对于采用模板的网站,在模板中:

采用之前:文本数据 --- 容器中显示
采用之后:截取数据 --- 加密、变量存储 --- 容器中Js方式显示

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

加密-Js构造(PHP):
>> 创建管理器对象(T2box),获取加密密钥;
>> 用该密码加密文本;
>> 密文赋值到Js变量;
>> 输出Js代码:基本代码、变量赋值、启动、干扰、显示等。

解密-显示(Js):
>> 获取验证钥;
>> 启动函数解码生成解密密钥;
>> 解密显示Js变量中的文本。

>>利与弊

由于加密了实际的文本数据,所以搜索引擎对页面的分析会是一个问题,但在目前
已存在各种SEO技术的情况下,这基本可以不成为一个问题了。如可以在页面<meta>
中包含关键字、简介,或直接插入一个包含关键字或页面简介的层等。

----------------------------------------------------------------------------
小偷程序原理:

小偷程序一般是直接请求原始网站的内容,然后替换掉页头标志性内容,页尾的版权
信息,以及一些广告等。或者单纯截取原始网页中对自己有用的数据作为自己网站的
资源,同时自身提供可定制的页头、页尾、广告等控制。从而实现盗取网站的目的。
它有一个缺点:如果原始网站改版,则需重新分析网站代码,改写程序。

这样的程序一般很简单,代码量较少,不过也唯其如此,相对于原始网站改版的风险,
它的成本才是可接受的。

(在本程序中,内容页里的文本被变形处理,所以信息也不能直接“截取”采用——
“截取”做的是加法,“替换”是做减法)

采集程序原理:

采集一般是首先针对某个有文章内容页链接列表的页面,分析提取出有用文章页的URL,
然后分析文章页面的源代码,提取出标题、正文、作者、文章来源等信息。

文章页URL列表的获得可以有多种方法:如列表页分析,手工录入,批量生成等。在这
方面做得比较好的有火车采集器(我就常用它),所以在文章列表页中做反采集的设计
意义不大。真正要反制采集,还必须从内容页上着手。
[/code]

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

这篇关于盗站与采集,分析及反制之术PHP实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/846515

相关文章

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、