zoukankan      html  css  js  c++  java
  • WEB安全之垃圾信息防御措施

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

    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%的外部提交。腾讯的大部分产品都使用了这种技术,比如微博和邮箱。
     
  • 相关阅读:
    Element ui TimePicker 开始时间不得小于结束时间
    Vue 使用print.js实现前端打印功能
    vue中props的默认写法
    Element Cascader 级联选择器 选择第一级 label标题选择 内容过多
    vue 定时器 不断切换组件 定时器越来越快的问题
    Vue 全局组件传递参数
    echarts渐变发光半圆仪表盘
    左侧折叠菜单在sessionStorage中保存左侧菜单的激活状态
    Vue 封装网络工具类
    .browserslistrc 配置兼容浏览器
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4756639.html
Copyright © 2011-2022 走看看