php – 如何防止依赖于XPath的抓取工具获取页面内容

前端之家收集整理的这篇文章主要介绍了php – 如何防止依赖于XPath的抓取工具获取页面内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > How do I prevent site scraping? [closed]26个
There是一个PHP库,让evreybody能够攻击我(类似于cURL).然后我有一个想法来阻止它,我想为我的元素使用动态类名.看这个:
<div class="<?PHP $ClassName ?>">anything</div> // $className is taken from the database

Note: $ClassName will vary evry time.

在这种情况下,任何人都不知道我的类名是什么来选择我的元素然后复制我的数据.现在我有两个问题:

>如何在$ClassName和.$ClassName(在css文件中)之间进行通信?换句话说,我如何使用PHP变量的css类名? (动态css类)
>它是否优化从数据库获取所有类名?

在可以在本地完成之前,使用数据库获取名称并不是最佳选择.你应该定义一个包含所有类名的数组,然后通过array_rand选择一个,有些东西是这样的:
// PHP code
   <?PHP
     $classes = array('class1','class2','class3','class4'); 
     $class_name = $classes[array_rand($classes)];
   ?>


// html code
     <div class="<? PHP echo $class_name; ?>">anything</div>


// css code
   <style>
     .<? PHP echo $class_name; ?> {
      // your css codes
     }
   </style>

注意:你必须知道你不能在.css文件中使用PHP代码,那么你应该在.PHP文件中编写你想要动态的所有css代码并使用< style>东西< / style>.

Meanwhilem,as @sємsєм said,you can creat dynamic html tags.

有点这样:(完整代码)

// PHP code
   <?PHP
     // dynamic class
     $classes = array('class1','class4'); 
     $class_name = $classes[array_rand($classes)];

     // dynamic tags
     $tags_statr = array('','<div>','<div><div>','<div><p>','<span><div>');
     $tags_end = array('','</div>','</div></div>','</div></p>','</span></div>');
     $numb = array_rand($tags_statr);
   ?>


// html code
     <?PHP echo $tags_statr[$numb]; ?>
     <div class="<? PHP echo $class_name; ?>">anything</div>
     <?PHP echo $tags_end[$numb]; ?>


// css code
   <style>
     .<? PHP echo $class_name; ?> {
      // your css codes
     }
   </style>

为了更高的安全性,您可以放置​​您的内容(此处为’任何’)(除了外部动态标签).例如:

<span1>anything</span1> // <span1> changed to <span2,3,4....>

在这种情况下,带有数据的相邻标签也是动态的,这使得爬虫更难.

最后,我必须说你不能完全阻止爬虫,你只是让它变得困难.如果您真的想保护自己的数据,可以执行以下操作:

>增加用户的限制. (例如,只有注册用户才能看到重要信息)>监控使用您网站的IP(如果可疑,请阻止它)>使用相关软件. (例如,限制每天搜索IP)

猜你在找的PHP相关文章