防止垃圾评论与机器人的攻击手段如下:

1)IP限制。其原理在于IP难以伪造。即使是对于拨号用户,虽然IP可变,但这也会大大增加共攻击的工作量。
2)验证码。其重点是让验证码难于识别,对于“字母+数字”的验证码,关键在于形变与重叠,增加其破解中切割和字模比对的难度,人眼尚且难以辨识,机器就更难处理了,再者是加大对于验证码的猜测难度。
3)Token和表单欺骗。通过加入隐藏的表单值或者故意对程序混淆表单值
4)审核机制。加大了管理人员的工作量,但理论上可以完全阻止垃圾评论,这是最无奈也是最有效的策略。
 
 
1.IP限制
      HTTP协议是透明的、公开的,服务器端根本无法区分来源是真实的提交还是伪造的。所以通过判断Referer等手段是于事无补的,但是HTTP也有自己的局限。由于HTTP协议是应用层的协议,是基于TCP/IP协议的。
      IP在TCP层传递,其传输需要通过TCP的“三次握手”。这个握手的过程中,有一个校验过程,因此IP是很难伪造的。而HTTP层属于顶层,无法控制IP,所以最简单有效的办法就是对IP进行限制。
      但是,不少代码会判断HTTP头的HTTP_X_FORWARDED是否是代理过来的,若是,则把其记为IP。但是,HTTP_X_FORWARDED来自于HTTP请求中的X Forwareded For报头,而这个报头是可以修改的。这就可能造成潜在的攻击。所以合理的判断是完全不考虑代理,而使用SERVER变量中的HTTP_CLIENT_IP或REMOTE_ADDR。二者难以伪造。出于安全考虑,凡是通过代理过来的请求或者HTTP头中包含XForwareded For报头的,很多程序采取了拒绝的方案。这种处理方式比较简单,误差也比较小。
 
2.Token法
要防止攻击的关键在于加大攻击的难度。最简单的是放一个隐藏可变的Token,每次提交都需要和服务器校对,若通不过,则为外部提交。
下面的代码称为Token法
<?php

define('SECRET','67%$#ap28');
function m_token()
{
$str = mt_rand(1000,9999);
$str2 = dechex($_SERVER['REQUEST_TIME'] - $str);
return $str.substr(md5($str.SECRET), 0, 10).$str2;
} echo m_token();
echo '<br />'; /**
* @param $str
* @param int $delay 表示时间延迟,在不同的程序根据业务来自行修改
*/
function v_token($str,$delay=300)
{
$rs = substr($str, 0, 4);
$middle = substr($str, 0, 14);
$rs2 = substr($str, 14, 8 );
return ($middle == $rs.substr(md5($rs.SECRET), 0, 10)) && ($_SERVER['REQUEST_TIME'] - hexdec($rs2) - $rs<$delay);
} var_dump(v_token(m_token()));
3.验证码
对于预防一些灌水机器人,主要采取验证码一类的措施,包括中文验证码、回答验证,但是对于这两点,专业的灌水机器 人都可以突破。但是对于技术含量不高的,可以直到一定的阻止作用,同时也降低了用户体验。
灌水机器 人通常都会抓取页面的FROM表单,分析必填荐与非必填项,对于必填项构造请求。如果存在普通的图形验证码,则启用图形识别模块、破解验证码、构造完整的数据包。对此可以建立一个INPUT,用CSS或者间接通过JavaScript设其页面为不可见,如果服务器收到的数据包含有这个控件的值,那么肯定是来自机器提交。这样也能起到一定的效果。另外,对INPUT的值进行欺骗对博客的垃圾评论能起到一定的作用
用户名:或者可以做成图片附上机器的学习。
<input type="text" name="email" />实际上代表用户名。
<input type="text" name="url" />实际上是E-mail
<input type="text" name="author" />实际上是URL,而且是隐藏的不能有任何输入的字段。
      在服务器端,如果$_POST['email']匹配的是一个电子邮件地址,那么一定是灌水机器人。如果atuthor字段有值,那么其也一定是灌水机器人。这叫做机器学习欺骗。
同理,可以定期变更action的提交地址,加大灌水机器人的学习难度,也可以把所有数据改为后台审核。
      但是,经过灌水机器 的学习和模型修改,过一段时间必将卷土重来。阻止外部提交一直是个难题。对于表单,因为它是可见的,所以很难阻止机器的猜解和模拟。目前,可行的办法就是使用Active控件。主要是IE Only和技术难度高,大多数的网站无法使用这样的技术,特别是个人站点。
使用JavaScript进行加密验证和平衡图形验证码,可以阻止99%的外部提交。腾讯的大部分产品都使用了这种技术,比如微博和邮箱。
 

WEB安全之垃圾信息防御措施的更多相关文章

  1. Web前端攻击方式及防御措施

    一.XSS [Cross Site Script]跨站脚本攻击 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户 ...

  2. 简单了解:Web前端攻击方式及防御措施

    一.XSS [Cross Site Script]跨站脚本攻击  恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用 ...

  3. web攻击和防御措施

    1.SQL注入:参照下面的链接 http://www.cnblogs.com/chenhaoyu/p/8758888.html 2.跨网站脚本攻击(Cross Site Scripting, XSS) ...

  4. 风炫安全web安全学习第二十九节课 CSRF防御措施

    风炫安全web安全学习第二十九节课 CSRF防御措施 CSRF防御措施 增加token验证 对关键操作增加token验证,token值必须随机,每次都不一样 关于安全的会话管理(SESSION) 不要 ...

  5. C# web服务器被webbench攻击及目现采用的防御措施

    web服务器连续两次出现CPU达到100%的情况,第一次还想着是升级时,哪个地方写错了,有死循环,最后重启了三次服务器才好. 但事后分析代码,没有死循环的可能,于是在第二次又出现CPU达100%时,仔 ...

  6. Web安全之CSRF攻击的防御措施

    Web安全之CSRF攻击的防御措施   CSRF是什么? Cross Site Request Forgery,中文是:跨站点请求伪造. CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击 ...

  7. 风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施

    风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施 Python 语言可能发生的命令执行漏洞 内置危险函数 eval和exec函数 eval eval是一个python内置函数, ...

  8. 风炫安全WEB安全学习第二十七节课 XSS的防御措施

    风炫安全WEB安全学习第二十七节课 XSS的防御措施 XSS防御措施 总的原则 控制好输入/输出 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证. 转义:所有输出到前端的数据都 ...

  9. Mac地址泛洪攻击的防御措施和具体配置

    Mac地址泛洪攻击指的是:利用交换机的mac地址学习机制,攻击者不断地刷新mac地址,填满交换机的mac地址表,以致崩溃,使交换机不得不使用广播发包,从而获取其他人的报文信息. mac地址泛洪攻击的防 ...

随机推荐

  1. selenium3+python3.6爬页面源码的代码

    from selenium import webdriver import unittest,time class my_test(unittest.TestCase): def setUp(self ...

  2. python模块:subprocess

    # subprocess - Subprocesses with accessible I/O streams # # For more information about this module, ...

  3. python线程——创建和启动

    可以通过实例化一个threading.Thread()对象来创建子线程. import threading import time def listen_music(num): print(" ...

  4. mpi

    使用MPI,计算cos x 函数的积分值,积分区间为(0,2PI)这里写图片描述基本思路: 把积分区间,分为相等若干块(此处起多少个线程,分多少块),每个线程分得一块积分区域,每块在分若干小块(此处定 ...

  5. Windows 注册表 16进制时间转换( Convert Reg_binary Time to a Datetime )

    背景: Windows注册表中,存在大量16进制的时间,以 reg_binary存储在注册表中. 例如: 0D 6C A4 4B 37 C5 CE 01 这种值日常报表中需要转换为适合人阅读的格式,实 ...

  6. [smf]smf论坛也很漂亮

    smf论坛代码国内使用的比较少,可能是大家习惯了dz论坛的互动方式吧!但是,smf论坛系统不失为一款好的论坛系统,也是目前为数不多的开源代码.使用起来之后,你会体会到它强大的后台操作.(例如:插件的安 ...

  7. Linux(lamp安装)

    网络配置 1. 配置ip地址和子网掩码 编辑配置文件: > cd  /etc/sysconfig/network-scripts > cp  ifcfg-eth0  ./ifcfg-eth ...

  8. unity API 之EventSystem.current.IsPointerOverGameObject()

    命名空间 :UnityEngine.EventSystems 官方描述: public bool IsPointerOverGameObject(); public bool IsPointerOve ...

  9. Web Components(续)

    概述 之前我们介绍了Web Components的基本概念,现在我们给出一个使用Web Components的实例代码,并且对组件化进行一些思考.记录下来,供以后开发时参考,相信对其他人也有用. 实例 ...

  10. C#不同窗体间数据传递

    在做项目中经常会使用不同窗体之间的值,所以就有了传值的概念.最常见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道. 1.       如果很多窗体都需要用到某一窗体的东西,比如登录窗体记 ...