URL攻击的实例解释

URL攻击:顾名思义,就是利用URL来进行攻击,攻击方式就是更改地址栏中的$_GET的参数,另外进行一些必要的猜测,比如以下面的URL为例:
http://www.myfreax.com/category.php?category=mysql3
攻击者可以了更改后面的参数mysql3的数值,进行猜测,或者结合一些其它的手段,我所知道有两个个Linux发行版专做攻击工具的,和测试的,非常强大,都是基于ubuntu制作的
BackTrack  #这个曾经在我学习Linux是安装过,专门用来攻击和渗透
blackbox Linux  #这个就没有使用过了
下面就是实例了,
<?php
     /**
      *
      *  @author Freax
      *  @2014-3-24
      *  @contact  huangyanxiong2013@gmail.com
      *
      */
     define( 'FREAX' , true);
     require_once  'include/init.php' ;
     'http://www.myfreax.com/category.php?category=PHP5' ;//正常url是这样的
     class  category{
         /**
          * 数据库      对象
          * @var Object
          */
         public  $db ;
         /**
          * smarty 对象
          * @var Object
          */
         public  $smarty ;
         /**
          * 地址  指向需要显示的页面
          * @var String
          */
         public  $action ;
         /**
          * 分页类
          * @var Object
          */
         public  $Page ;
         /**
          * 缓存id
          * @var string
          */
         public  $cacheid ;
         /**
          * 初始化
          * @var String
          */
         public  function  __construct( $db , $smarty , $page ){   //做完这个函数就是将页面显示出来
             $this ->db= $db ;
             $this ->smarty= $smarty ;
             $this ->Page= $page ;
             $this ->getAtion();
             $this ->getData();
             $this ->display();
         }
         /**
          * 获取地址    这个是非常关键的这里做的不得好也是攻击的机会
          * 在在这个函数中,由于我只想获取到的是一个数字其它都是不要的,所以要将其它过滤
          */
         public  function  getAtion(){
             $bool =preg_match_all( '/\d+/' ,  $_SERVER [ 'QUERY_STRING' ], $match );
             /* 如果按照我正常些的url来执行的话,根本就不要这个判断,也可以正常执行,
              * 但是有意的人就会尝试更改这些参数 ,这里我需要获取到数据库分类的id,
              * 并且使用这个id查询数据,难免不会受到sql攻击的,所以有这个判断*/
             if  (! $bool ) {
                 header( "HTTP/1.1 301 Moved Permanently" );    //攻击者更改参数后你将重定向404,或者其它相对安全的页面,不过建议还是重定向404静态页面,
                                                             //我这里是首页,因为我首页是不接受任何参数的
                 header( "location:http://" .WEB);
                 exit ();    //记得要退出不然重定向后还是会执行的,因为php解释器没有看到结束标签\?\>
             } else  {
                 $this ->action= $match [0][0];
             }
         }
         /**
          * 获取缓存id
          * @return string
          */
         public  function  getcacheid(){
             $this ->cacheid=(isset( $_GET [ 'category' ])? $_GET [ 'category' ]: '' ).@(isset( $_GET [ 'page' ])? $_GET [ 'page' ]: '' );
             return  $this ->cacheid;
         }
         /**
          * 根据地址 获取对应的数据
          * 根据地址判断smarty是否有缓存
          * 没有缓存区数据库获取
          * 赋值给模板
          */
         public  function  getData(){
             /* 这里根据cacheid判断是否存在缓存,如果没有缓存则从数据库中获取数据 ,由于cacheid在客户端也是可以更改的,
              * http://www.myfreax.com/category.php?category=PHP2&page=23 这个url就是很形的了,一个是分类,一个是页数,
              * 客户端可以随意更改页数,cacheid永远不同,生成的缓存,也会增多,只要来个循环,就生成N的文件缓存
              * 为什么我这里可以随意更改$_GET参数都不会参数,都可以执行,因为$article=$this->db->selectArrs。。。。。。。。。。。。这个语句来说,即使没有从数据库中获取到数据也会返回空数组*/
             if  (! $this ->smarty->isCached( 'index.html' , $this ->getcacheid())){
                 $nav = $this ->db->selectArrs( 'select * from ' .PREFIX. 'class' );
                 $this ->Page->getTotalPageClass( $this ->db,PREFIX. 'article' , 'typeid' , $this ->action);
                 $this ->Page->getcurrPage();
                 $this ->Page->getStartPage();
                 $article = $this ->db->selectArrs( 'select  ' .PREFIX. 'article.*,' .PREFIX. 'class.name from ' .PREFIX. 'article left join blog_class  on (' .PREFIX. 'article.typeid=' .PREFIX. 'class.id)   where typeid= ' . $this ->action. ' order by  id desc  limit ' . $this ->Page->startPage . ',' .  $this ->Page->paging);
                 /* 所以这里就加上一个断
                  *  */
                 if  (! $article ) {
                     header( "HTTP/1.1 301 Moved Permanently" );
                     header( "location:http://" .WEB);
                     exit ();
                 }
                 $this ->Page->getLinkPage( 'category.php' );
                 $this ->Page->getClassPage( $article [0][ 'name' ]. $article [0][ 'typeid' ]);
                 $pagelink = $this ->Page->createPageLinks();
                 $navAtcion =@ $article [0][ 'name' ];
                 $this ->smarty->assign( 'articles' , $article );
                 $this ->smarty->assign( 'navs' , $nav );
                 $this ->smarty->assign( 'navAction' , $navAtcion );
                 $this ->smarty->assign( 'pagelink' , $pagelink );
                 }
             }
         /**
          *  返回给前可以对模板进行一些操作
          *  将数据返回给用户
          */
         public  function  display(){
             $this ->smarty->display( 'index.html' , $this ->getcacheid());
         }
     }
     /**
      * 实例化category类
      */
     new  category( $db , $smarty , $page );
?>


转载于:https://my.oschina.net/freax/blog/221127

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值