发新话题
打印

[讨论]防范网页被采集

[讨论]防范网页被采集

议题作者:amxku
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

PHP版采集程序核心代码
复制内容到剪贴板
代码:
<?
//$url="[url]http://www.csnexp.com[/url]";
$url=$_GET["url"];
if ($url<>"")
{
     $f=getFileContents($url);
     print_r(htmlspecialchars($f["file"]));
}


function getFileContents($url)
     {
          $user_agent="User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)";
          $urlparts = parse_url($url);
          $path = $urlparts[&#39;path&#39;];
          $host = $urlparts[&#39;host&#39;];
          if ($urlparts[&#39;query&#39;] != "")
          $path .= "?".$urlparts[&#39;query&#39;];
          if (isset ($urlparts[&#39;port&#39;])) {
              $port = (int) $urlparts[&#39;port&#39;];
          } else
          if ($urlparts[&#39;scheme&#39;] == "http") {
              $port = 80;
          } else
          if ($urlparts[&#39;scheme&#39;] == "https") {
              $port = 443;
          }

          if ($port == 80) {
              $portq = "";
          } else {
              $portq = "port";
          }

          $all = "*/*";

          $request = "GET $path HTTP/1.0\r\nHost: $host$portq\r\nAccept: $all\r\nAccept-Encoding: identity\r\nUser-Agent: $user_agent\r\n\r\n";

          $fsocket_timeout = 30;
          if (substr($url, 0, 5) == "https") {
              $target = "ssl://".$host;
          } else {
              $target = $host;
          }


          $errno = 0;
          $errstr = "";
          $fp = @ fsockopen($target, $port, $errno, $errstr, $fsocket_timeout);

          if (!$fp) {
              $contents[&#39;state&#39;] = "NOHOST";
              print "Error: $errstr";
              return $contents;
          } else {
              if (!fputs($fp, $request)) {
                   $contents[&#39;state&#39;] = "Cannot send request";
                   return $contents;
              }
              $data = null;
              socket_set_timeout($fp, $fsocket_timeout);
              $status = socket_get_status($fp);
              while (!feof($fp) && !$status[&#39;timed_out&#39;]) {
                   $data .= fgets($fp, 8192);
              }
              fclose($fp);
              if ($status[&#39;timed_out&#39;] == 1) {
                   $contents[&#39;state&#39;] = "timeout";
              } else
              $contents[&#39;state&#39;] = "ok";
              $contents[&#39;file&#39;] = substr($data, strpos($data, "\r\n\r\n") + 4);
          }
          return $contents;
     }
?>
对于这种情况,很多站长触手无策,目前我想到的有两种方法可以稍加防范,
1:文章生成静态HTML页面。命名以长一点的时间和随机数或随机字符为文件名,如果您的服务器容量够大,数据多的时候生成静态页还可以减轻服务器负载。
2:在文章内容里加入随机长度的随机字符,并让他跟网页底色重合,这样不影响正常用户的浏览,也可以比较好的阻止采集程序对你内容的采集,因为字符长度不好确定。:)
希望朋友们也说说自己对数据采集的看法。



有没有什么更好的办法来防止PHP站点被采集呢?
高见?
[url=http://www.amxku.net]amxku.net[/url]

TOP

问个问题?就是你说的PHP采集是指什么?是网页源代码被盗用么还是百度之类的搜索程序?还有HTML不大适合做个人网站,因为HTML是静态页面,做个人网站的话不是很好。个人意见!
成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事,晚上鸟没啥事。

TOP

实施客户端加密。
所有的信息以某种小计算量的算法打乱(加密)放在服务端,或者在输出的时候才进行打乱(这样可以动态)。
发给客户端解密用的脚本和这段打乱的信息。在客户端解密,输出。

这样可以阻止一般的采集。
但如果被对方盯住了,也有点无可奈何……
因为理论上既然网站信息是公开的,那就不会逃避被采集的命运……

个人意见。
http://hi.baidu.com/anuiz anuiz#163.com

TOP

先回答1楼朋友的问题:
采集简单的说:自己架设了一个站点后,里面不是没有什么内容吗?
以前都是去别的站转贴,但那个太麻烦拉,采集就是批量转过来,嘎嘎,一下子把别的站的东西全copy过来。
一般什么MM图什么的都采集的,哦,校盟的主站应该也采集不少的。
如果你的站被大量采集,你服务器的CPU就等着占用100%拉 呵呵
大体是这个意思!
2楼方法没有试过 麻烦的说
可以 列表页的随机模板调用生成,内容页的随机模板调用生成  这样有所效果
另外 在标题后加上(页码) 也有一定效果

另外 PS一下  网易的学院是公认的最难采集的  好象到此刻还没有哪位成功过 嘎嘎

TOP

我说的内容好象是用来防止那种网页小偷的~~[因为觉得楼主给的程序好象就是这个意思~(没详细看)]
这样我说的方法就无法防止这种100%CPU消耗的采集了.
不过有方法可以缓解,使CPU降低一些.就是防止刷站的那些方法.(因为我们的小站曾被别人D,托管后又被刷,过程中学到了不少东西,也积累了些经验)
首先是页面静态化,可以大大降低CPU的消耗.
无法静态化的页面就限制刷新速度,利用SESSION保存上次请求时间,拒绝小于一定间隔时间的请求(没有SESSION的请求先设SESSION,让他一端时间后再请求)
http://hi.baidu.com/anuiz anuiz#163.com

TOP

我看过一个站、文章先显示一半,看另一半需要填验证码:)

这个够变态的,不过对付机器人还是可以的。 为了看一篇好文章输入一个验证码也是没有什么问题的。

TOP

生成静态和加入随机长度的字符是达不到防止采集的要求的。

最近unix01群里面大量讨论如何采集站点.但没有很好的防止被采集的方法

楼上的验证吗是比较好的方法
曾因酒醉鞭名马 生怕情多累美人

TOP

发新话题