PHP代码审计 09 CSRF 跨站请求伪造

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 简介

  1. CSRF 是什么

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one clickattack/session riding,缩写为:CSRF/XSRF。

  2. CSRF 可以做什么

    你这可以这么理解CSRF 攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF 能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

  3. 审计 csrf

    敏感表单是否使用token 验证

  4. 防御策略

    1.验证HTTP Referer 字段
    2.在请求地址中添加token 并验证
    3.在HTTP 头中自定义属性并验证

2. DVWA 源代码

  1. 源代码

     <?php 
                  
         if (isset($_GET['Change'])) { 
          
             // Turn requests into variables 
             $pass_curr = $_GET['password_current']; 
             $pass_new = $_GET['password_new']; 
             $pass_conf = $_GET['password_conf']; 
     
             // Sanitise current password input 
             $pass_curr = stripslashes( $pass_curr ); 
             $pass_curr = mysql_real_escape_string( $pass_curr ); 
             $pass_curr = md5( $pass_curr ); 
              
             // Check that the current password is correct 
             $qry = "SELECT password FROM `users` WHERE user='admin' AND password='$pass_curr';"; 
             $result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' ); 
     
             if (($pass_new == $pass_conf) && ( $result && mysql_num_rows( $result ) == 1 )){ 
                 $pass_new = mysql_real_escape_string($pass_new); 
                 $pass_new = md5($pass_new); 
     
                 $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; 
                 $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); 
                              
                 echo "<pre> Password Changed </pre>";         
                 mysql_close(); 
             } 
          
             else{         
                 echo "<pre> Passwords did not match or current password incorrect. </pre>";             
             } 
     
         } 
     ?> 
    
  2. DVWA 中用到的防御函数

    1. stripslashes() 函数

      stripslashes() 函数删除由 addslashes() 函数添加的反斜杠

       语法:
       echo stripslashes("Who\'s Bill Gates?");
      
    2. mysql_real_escape_string() 函数

      转义 SQL 语句中使用的字符串中的特殊字符。
      下列字符受影响:

       \x00
       \n
       \r
       \
       '
       "
       \x1a
      

      如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

       语法:
       mysql_real_escape_string(string,connection)
      
    3. md5() 函数

      计算字符串 “Hello” 的 MD5 散列

       用法:
       <?php
       $str = "Shanghai";
       echo md5($str);
       ?>
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值