防止屏幕刮擦

时间:2008-12-28 22:59:01

标签: screen-scraping

继续关于 Legalities of screen scraping 的问题,即使是非法的人仍然会尝试,所以:

可以采用哪些技术机制来阻止或至少抑制屏幕抓取?

哦,只是为了咧嘴笑,让生活变得困难,保留搜索引擎的访问权限可能会很好。我很可能在这里扮演魔鬼的拥护者,但有一个严重的基础点。

21 个答案:

答案 0 :(得分:63)

你无法阻止它。

答案 1 :(得分:19)

我在这里写了一篇博文:http://blog.screen-scraper.com/2009/08/17/further-thoughts-on-hindering-screen-scraping/

用来解释:

如果您在互联网上发布信息,有人可以获得它,这只是他们想要投入多少资源的问题。使所需资源更高的一些方法是:

图灵测试

转弯测试的最常见实现是旧的CAPTCHA,它试图确保人类读取图像中的文本,并将其提供给表单。

我们发现大量网站实施了一个非常弱的CAPTCHA,只需几分钟即可到达。另一方面,有一些非常好的图灵测试实现我们会选择不处理,但是复杂的OCR有时可以克服这些,或许多公告板垃圾邮件发送者有一些聪明的技巧来克服这些。< / p>

数据为图像

有时您知道数据的哪些部分很有价值。在这种情况下,用图像替换这样的文本是合理的。与图灵测试一样,有OCR软件可以读取它,并且没有理由我们无法保存图像并让其他人稍后阅读。

然而,通常情况下,将数据列为没有文字替代的图像违反了美国残疾人法案(ADA),可以通过拨打公司法律部门的电话来解决。

代码混淆

使用像JavaScript函数这样的东西来显示页面上的数据虽然它不是HTML源代码中的任何地方,但这是一个很好的技巧。其他例子包括在页面中放置多产的,无关的评论或者有一个以不可预测的方式命令事物的交互式页面(我想到的例子是使用CSS来使显示相同,无论代码的排列如何。)

CSS Sprites

最近我们遇到过一些情况,其中一个页面有一个包含数字和字母的图像,并使用CSS只显示他们想要的字符。这实际上是前两种方法的组合。首先,我们必须获取主图像并读取其中的字符,然后我们需要读取网站中的CSS并确定每个标记指向的字符。

虽然这很聪明,但我怀疑这也会违反ADA,尽管我还没有测试过。

限制搜索结果

我们想要获得的大多数数据都是以某种形式出现的。有些很容易,提交一个空白表格将产生所有结果。有些人需要在表格中加上星号或百分比。最困难的是每次查询只会给你这么多结果的那些。有时我们只是创建一个循环,将字母表的字母提交给表单,但如果这太笼统,我们必须循环提交2或3个字母的所有组合 - 这是17,576个页面请求。

IP过滤

有时,勤奋的网站管理员会注意到来自特定IP地址的大量页面请求,并阻止来自该域的请求。但是,有许多方法可以通过备用域传递请求,因此这种方法通常不是非常有效。

网站修补

Scraping始终会关闭HTML中的某些内容。一些网站有资源不断调整他们的HTML,以便任何刮擦不断过时。因此,在不断变化的条件下不断更新刮擦成本无效。

答案 2 :(得分:19)

因此,一种方法是混淆代码(rot13或其他东西),然后在页面中使用一些类似于document.write(unobfuscate(obfuscated_pa​​ge))的javascript。但这完全打击了搜索引擎(可能!)。

当然,这实际上并没有阻止那些想要窃取你数据的人,但它确实会让你更难。

一旦客户端拥有数据,它几乎是游戏结束,所以你需要在服务器端看一些东西。

鉴于搜索引擎基本上是屏幕抓取器,事情很难。您需要了解屏幕抓取工具与屏幕抓取工具之间的区别。当然,你也只有正常的人类用户。因此,这可归结为一个问题,即服务器上如何有效地将其归类为来自 human good 屏幕抓取器或 bad < / em>屏幕刮刀。

所以,开始的地方是查看你的日志文件,看看是否有一些模式允许你有效地对请求进行分类,然后确定模式,看看是否有某种方式屏幕抓取程序,在知道此分类后,可以隐藏自己看起来像 human good 屏幕抓取程序。

一些想法:

  • 您可以按IP地址确定好的屏幕抓取工具..
  • 您可以通过并发连接数,每个时间段的连接总数,访问模式等来确定刮刀与人类。

显然这些都不是理想的,也不是万无一失的。另一个策略是确定你可以采取什么措施,这些措施对人类不显眼,但(可能)对于刮刀很烦人。一个例子可能是减慢请求的数量。 (取决于请求的时间关键性。如果他们实时抓取,这将影响他们的最终用户。)

另一方面是看看为这些用户提供更好的服务。很显然,他们正在抓狂,因为他们想要数据。如果您为他们提供了一种简单的方法来直接获取有用格式的数据,那么他们就可以更轻松地进行屏幕抓取。如果有一种简单的方法,则可以调节对数据的访问。例如:给请求者一个唯一的密钥,然后限制每个密钥的请求数量,以避免服务器过载或每1000个请求收费等。

当然还有人会想要扯掉你,然后可能还有其他的方法可以让他们失去理智,他们可能会开始非技术性的,并且需要合法的途径来维持。

答案 3 :(得分:10)

很难防止屏幕刮擦,但如果你真的,真的很想你 经常更改HTML或经常更改HTML标记名称。大多数屏幕抓取工具使用字符串比较标记名称,或正则表达式搜索特定字符串等。如果您要更改底层HTML,它将使他们需要更改他们的软件。

答案 4 :(得分:5)

预防起来非常困难。问题是网页意味着要由程序(您的浏览器)解析,因此它们非常容易抓取。您可以做的最好是保持警惕,如果您发现您的网站被刮,请阻止违规计划的IP。

答案 5 :(得分:4)

根据定义,搜索引擎是屏幕抓取工具。所以你做的大部分事情都是为了让屏幕刮擦变得更加困难,这也会使你的内容索引变得更加困难。

表现良好的机器人会尊重你的robots.txt文件。 您还可以阻止已知违规者的IP,或者在未发送给已知良好机器人时将混淆的HTML标记添加到您的内容中。虽然这是一场失败的战斗。我推荐已知违法者的诉讼路线。

您还可以隐藏内容中的识别数据,以便更轻松地追踪违规者。众所周知,百科全书需要添加Fictitious entries来帮助检测和起诉版权侵权者。

答案 6 :(得分:3)

不要阻止它,检测它并报复那些尝试的人。

例如,让您的网站开放下载,但传播一些没有理智的用户会遵循的链接。如果有人关注该链接,对于人或其他可疑行为点击太快,请立即做出反应以阻止用户尝试。如果有登录系统,请阻止用户并就不可接受的行为与他联系。这应该确保他们不再尝试。如果没有登录系统,而不是实际页面,则返回一个大警告,其中包含指向相同警告的虚假链接。

这非常适用于像Safari Bookshelf这样的东西,用户复制粘贴一段代码或章节邮寄同事是好的,而完全下载的书是不可接受的。我很确定他们会发现有人试图下载他们的书籍,阻止帐户并显示他可能会遇到真正麻烦的罪魁祸首,如果他再试一次。

为了进行非IT类比,如果机场安检只会让飞机上的武器变得困难,那么恐怖分子就会尝试多种方式来偷偷过去的安检。但是,只是尝试会让你陷入深深的麻烦这一事实使得没有人会试图找到偷偷摸摸的方法。被抓获和受到惩罚的风险太高。做同样的事。如果可能的话。

答案 7 :(得分:3)

最好的投资回报可能是添加随机换行符和多个空格,因为大多数屏幕抓取工具都是从HTML作为文本而不是XML(因为大多数页面不会解析为有效的XML)。

浏览器会忽略空格,因此您的用户不会注意到

  Price : 1
  Price :    2
  Price\n:\n3

是不同的。 (这来自我用AWK搜索政府网站的经验。)

下一步是在随机元素周围添加标签以搞乱DOM。

答案 8 :(得分:2)

一种方法是创建一个接受文本和位置的函数,然后Serverside为文本中的每个字符生成x,y pos,生成包含字符的随机顺序的div。生成一个javascript,然后在屏幕右侧的每个div上进行定位。在屏幕上看起来不错,但在后面的代码中没有真正的命令来获取文本,如果你不通过你的javascript(可以动态更改每个请求)麻烦(

工作量太大,可能有很多怪癖,这取决于你在网站和其他方面有多少文字和UI复杂程度。

答案 9 :(得分:2)

预防? - 不可能,但你可以加倍努力。

Disincentivise? - 可能,但您不会喜欢这个答案:为感兴趣的各方提供批量数据导出。

从长远来看,如果您发布它,所有竞争对手都会拥有相同的数据,因此您需要其他方式来使您的网站多样化(例如,更频繁地更新它,使其更快或更容易使用)。现在甚至谷歌都在使用诸如用户评论之类的信息,你认为你可以做些什么呢?告诉他们并从他们的索引中启动?

答案 10 :(得分:1)

鉴于大多数网站都希望获得良好的搜索引擎排名,并且搜索引擎都是刮刀机器人,所以您可以做的事情并不多,这不会损害您的搜索引擎优化。

你可以创建一个完全由ajax加载的网站或基于Flash的网站,这会使机器人更难,或隐藏登录后面的所有内容,这会使其更难,但这些方法中的任何一种都会损害您的搜索排名并且可能会惹恼你的用户,如果有人真的想要它,他们会找到一种方法。

拥有无法抓取内容的唯一保证方法是不在网上发布。网络的本质是这样的,当你把它放在那里时,它就在那里。

答案 11 :(得分:1)

如果您想要保护的信息不多,您可以将其转换为动态图片。然后他们必须使用OCR,这样可以更容易地刮掉另一个站点而不是你的站点。

答案 12 :(得分:1)

鉴于任何网站的目的是发布(即公开)信息,我认为很少。

  • 当然,您可以在登录后隐藏数据,但这是一种非常情境化的解决方案。

  • 我见过的应用程序只提供请求标题指示网页浏览器的内容(而不是匿名或“雅加达”),但这很容易欺骗,你会失去一些真正的人类。< / p>

  • 然后你可能会接受一些废品,但如果请求来自同一个IP的速度太高,那么就不能通过不提供内容来为他们带来难以承受的生活。这可能不是完全覆盖,但更重要的是,存在IP可以覆盖许多许多独特的人类用户的“AOL问题”。

最后两种技术都严重依赖于交通拦截技术,这是一种不可避免的性能和/或财务支出。

答案 13 :(得分:0)

你可以把所有东西放在闪存中,但在大多数情况下,这会惹恼许多合法用户,包括我自己。它可以用于某些信息,如股票价格或图表。

答案 14 :(得分:0)

我怀疑没有良好的方法来做到这一点。

我想你可以通过一种机制运行所有内容,将文本转换为使用CAPTCHA风格的字体和布局呈现的图像,但这会破坏SEO并惹恼用户。

答案 15 :(得分:0)

我曾尝试“屏蔽”一些PDF文件,但却发现他们实际上是以半随机顺序将字符放入PDF中。我想PDF格式允许您为每个文本块指定一个位置,并且他们使用了非常小的块(小于一个单词)。我怀疑所讨论的PDF并没有试图阻止屏幕抓取,因为他们正在使用渲染引擎做一些奇怪的事情。

我想知道你是否可以做那样的事情。

答案 16 :(得分:0)

好吧,在将内容从服务器推送到客户端之前,删除所有\ r \ n,\ n,\ t并替换除了单个空格之外的所有内容。现在你的html页面中有一条长行。谷歌这样做。这将使其他人难以阅读您的HTML或JavaScript 然后你可以创建空标签并随意插入它们。这将没有效果。
然后,您可以记录所有IP以及它们访问您网站的频率。如果您看到每次都按时进入,则将其标记为机器人并阻止它 如果您希望它们进入,请确保单独保留搜索引擎。
希望这有帮助

答案 17 :(得分:0)

您可以检查访问您网站的客户的用户代理。某些第三方屏幕抓取程序有自己的用户代理,因此您可以阻止它。好的屏幕刮刀会欺骗他们的用户代理,因此您将无法检测到它。如果您试图阻止任何人,请小心,因为您不想阻止合法用户:)

您可以期待的最好的方法是阻止人们使用不够智能的屏幕抓取工具来更改其用户代理。

答案 18 :(得分:0)

如何使用iText library从数据库信息中创建PDF?与Flash一样,它不会使刮不可能,但可能会使它更难一点。

内尔斯

答案 19 :(得分:0)

老问题,但是 - 增加交互性使得屏幕抓取变得更加困难。如果数据不在原始响应中 - 比如说,您在页面加载后发出了一个AJAX请求来填充div - 大多数刮刀都看不到它。

例如 - 我使用mechanize库来进行抓取。 Mechanize不执行Javascript-它不是一个现代浏览器 - 它只是解析HTML,让我跟踪链接和提取文本等。每当我遇到一个大量使用Javascript的页面时,我就会窒息 - 没有完全编写脚本浏览器(支持Javascript的全部范围)我被卡住了。

这个问题使得高度互动的Web应用程序的自动化测试非常困难。

答案 20 :(得分:0)

我从没想过会阻止打印屏幕......那么你知道什么,结帐新技术 - sivizion.com。使用他们的视频缓冲技术,没有办法做一个打印屏幕,很酷,非常酷,但很难使用...我认为他们也授权技术,检查出来。 (如果我错了,请在这里发布如何被黑客攻击。) 在这里找到它:How do I prevent print screen