垃圾评论和灌水机器人一直是各大论坛和博客最头疼的问题,为了解决该问题,我们需要先了解它的产生过程,然后有针对性地进行防御。

1. web浏览器的工作流程
用户在浏览器中输入网址,浏览器与服务器建立连接,发起HTTP请求,请求远程服务器中的URL,服务器接收请求,理解后进行响应,将响应结果返回给浏览器,浏览器解析收到的响应数据,最后呈现给用户。
其实,浏览器就是一个实现了HTTP协议的客户端软件。在浏览器与web服务器交互的过程中,浏览器始终扮演着一个忠实执行者的角色。据此可知,只要遵循HTTP协议和服务器进行交互,就实现了一个最简单的浏览器,只是这个浏览器只提供对数据的收发而不提供解析功能。而对于服务器端而言,无法判断是真正的浏览器还是一个虚拟的浏览器。
2. PHP中与HTTP协议相关的函数
如何发送HTTP请求呢?可以使用代码发送HTTP头,如服务器端的PHP、客户端的Ajax,也可以使用各种抓包工具构造HTTP Request包。
PHP中与HTTP协议相关的函数,主要有几下几种:
get_headers 函数:获取服务器响应一个HTTP请求时的所有标头。通常用此函数请求一个URL,根据其返回的数据判断状态码是否为200,就可以判定所请求的资源是否存在。
file 系列函数:包括fopen、file_get_contents等,可以用来操作文件,也可以请求一个网络上的资源。
stream_* 系列函数:发送请求,包括但不限于HTTP协议。
socket 系列函数:通过socket(套接字)发送和请求数据,包括但不限于HTTP协议。
cURL 扩展库:PHP的一个扩展,这是一个封装的函数库,可以用来模拟浏览器和服务器进行交互,功能比较强大。
header 函数:可用此函数发送原始的HTTP头,需要注意的是,此函数之前不能有任何输出包括空格等。
这里用最简单的方式,即使用 file 系列函数发送HTTP请求。
我们经常用 file_get_contents 函数获取文件的内容,实际上这个函数还可以打开一个网络地址,实现简单的网页抓取。用 file_get_contents 或者 fopen、file、readfile等函数读取URL时,会自动创建一个 $http_response_header 变量,该变量中保存了HTTP响应的报头。使用 fopen 等函数打开的数据流信息还可以用 stream_get_meta_data 获取。
一个简单的HTTP协议使用示例:
';$fp = fopen('http://www.baidu.com', 'r');
var_dump(stream_get_meta_data($fp));
fclose($fp);
echo '

';var_dump(get_headers('http://demo.com'));
?>
3. 模拟灌水机器人
上述 file 系列函数,在 PHP5 中新增了 context 参数,使得它们更加灵活,通过该参数可以定制 HTTP 请求,甚至POST数据。下面我们就利用 file_get_contents 函数发送请求,模拟一个灌水机器人向一个博客页面发送评论。
首先,打开某博客页面,查看评论表单所需的字段和表单的提交方式,假设所需字段只有一个 comment,表单采用的是 POST 方式提交。

然后,新建一个robot.php文件,用代码构建一个 HTTP 请求,代码如下:
'this is a robot comment');
$data = http_build_query($data);$host = "Host: demo.com\r\n";
$content_type = "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$content_length = "Content-length: ".strlen($data)."\r\n";
$user_agent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";$header = $host.$content_type.$content_length.$user_agent;$options = array('http'    =>    array('method'    =>    'POST','header'    =>    $header,'content'    =>    $data                )
);
$context = stream_context_create($options);$html = file_get_contents('http://demo.com/?id=1', false, $context);
echo $html;
?>
最后,运行 robot.php 文件即可。
如果是简单的页面抓取或数据提交,可以考虑使用 file_get_contents 函数,较为复杂的情况则需要使用cURL。但它们的本质都是一样的,都需要用到HTTP协议。
4. 使用抓包工具构造和提交HTTP请求
这里以 Fiddler 抓包软件为例。
打开 Fiddler,然后在浏览器中打开要进行评论的博客,输入评论后提交表单,用 Fiddler 工具,获取到提交评论时的原始请求数据,进行复制。然后,清空 Fiddler 左侧面板中的所有请求记录,点击 Fiddler 右侧面板的 Composer 按钮,再点击 Raw 按钮,将刚刚复制的原始请求数据粘贴到 Raw 下方的编辑框,可对原始请求数据进行更改,构造自己的 HTTP 请求。最后,点击最右侧的 Execute 按钮,就可以提交 HTTP 请求了。
5. 如何预防灌水机器人
预防灌水机器人的方法,主要有以下几种:
  • IP限制。其原理在于IP难以伪造,即使是拨号用户,虽然IP可变,但有了IP限制后,就加大了灌水机器人的攻击难度。
  • 验证码。用户提交评论时,要求其必须输入验证码方可提交,还可适当地加大验证码的识别难度。
  • Token法。在表单中加一个隐藏的Token字段,Token的值可变,每次提交表单时,服务器都对Token的值进行校验。
  • 审核机制。所有的评论都需要网站管理员审核后,方可显示,这在一方面加大了管理人员的工作量,但却在理论上可以完全阻止垃圾评论,这是最无奈也是最有效的方法。

HTTP应用:模拟灌水机器人相关推荐

  1. byr论坛灌水小工具

    原来写过一个模拟登陆byr论坛的脚本:一个CURL模拟登陆论坛的脚本+cookie伪造的方法 这次改了改,就成了一个小小的灌水机器人. 直接贴代码了: <?php /*** @author : ...

  2. 可怕,GPT-3论坛跟帖灌水一周无人发现!专挑热搜,秒秒钟长文

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI "我被绿了怎么办"."存款3000万的我仍然感到迷茫"."人在美国,刚下飞机" ...

  3. 怎么绕过论坛回复_可怕,GPT3论坛跟帖灌水一周无人发现!专挑热搜,秒秒钟长文...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI "我被绿了怎么办"."存款3000万的我仍然感到迷茫"."人在美国,刚下飞机" ...

  4. 本周AI热点回顾:GPT-3论坛跟帖灌水一周无人发现; 潘建伟院士高徒陆朝阳获美国物理学会量子计算奖

    点击左上方蓝字关注我们 01 NLP/CV模型跨界进行到底,视觉Transformer要赶超CNN? 在计算机视觉领域中,卷积神经网络(CNN)一直占据主流地位.不过,不断有研究者尝试将 NLP 领域 ...

  5. July 14th 模拟赛C T3 灌水 Solution

    空降题目处 点我点我点我 Description: 学生都很喜欢灌水,第一天只有Alice给她的每个朋友灌了一次水,从第二天开始,所有学生(包括Alice)将会有规律地去灌水: •如果前一天被灌了奇数 ...

  6. 同盾反欺诈云防垃圾灌水帖体验分享

    年初将留言本改成了松松论坛,解决了留言本很多问题,也有了互动性,增强了粘性. 不过随后遇到了很多问题,尤其是垃圾贴的问题困扰了我们很久,有一段时间有人用论坛群发器发布了很多垃圾贴,原本只有几千条的帖子 ...

  7. 二本本科生连发10篇SCI被喷“灌水严重”?原来是因为......

    近日,徐州工程学院的万仲禹同学因发10篇SCI并且获香港城市大学全额奖学金直博资格,引发了各界热议,目前万仲禹本人已做出回应,表示"希望成千上万的二本学生看到,我们没有985/211的条件, ...

  8. 如何防止用户论坛恶意灌水

    今天论坛有很多广告信息.每个版块都有几百条信息.手动发不可能.一定是用程序发的.无法通过程序判断是否灌水,只能通过设置发帖间隔时间.发帖最少字数及发帖验证码来减少.例如后台数据库已经存有关键字{三*陪 ...

  9. 工业品网络营销的第三方平台的免费信息发布:灌水 上海添力

    工业品网络营销的免费午餐:灌水 <工业品网络营销>系列讲座第十一课 我们来模拟苏州一家采购商,想在苏州找一家生产离型纸的厂家,在百度里搜索"苏州离型纸厂"一词时,结果如 ...

最新文章

  1. 从最基础的讲起如何做到均匀的生成随机数
  2. TCP keepalive的详解(解惑)
  3. HQuery中html结构及文本的修改
  4. 【智能车Code review】——小S与中S道路判断
  5. tsql是mysql中的吗_Mysql中的sql是如何执行的
  6. 自己动手写DB数据库框架(增)
  7. 基于RabbitMQ RPC实现的主机异步管理
  8. IS技术:稳定压倒一切
  9. Eclipse语言包在官网下载不了-解决方案
  10. 补题:HOJ吉林selection B-Bribing Eve(Gym-101174B) (象限极角排序)
  11. Android Studio 插件-Android Styler 的使用
  12. html如何将图片弄成背景,如何用css把图片弄成背景
  13. 怎么理解毕业论文中理论意义和实践意义的区别?
  14. SDF: Software-defined flash for web-scale internet storage systems
  15. PHP日活10万,小程序日活超4亿,近10万商家开通直播,私域红利已来 !
  16. JobScheduler用法
  17. linux下更新Cmake,包括cmake下载缓慢解决方案
  18. Robust Document Image Dewarping Method Using Text-Lines and Line Segments论文学习笔记
  19. 分布式架构设计概要总结
  20. 哲学和科学的区别是什么 ?

热门文章

  1. String字符串转化为int类型
  2. #莫队,分块#codevs 6555 洛谷 1494 jzoj 1902 小Z的袜子
  3. “COMSOL Multiphysics多物理场仿真技术与应用” 电化学专题
  4. Mysql配置ssl证书
  5. ReID行人重识别(训练+检测,附代码),可做图像检索,陌生人检索等项目
  6. HTTP和HTTPS、HTTP返回码
  7. 风华贴片电容命名规则
  8. android 手机分区失败怎么办,一种Android系统Data分区自修复方法及系统专利_专利查询 - 天眼查...
  9. python break语句作用_Python break语句详解
  10. 【微信小程序】上传图片到oss对象存储(PHP)