审计dvwa靶场完全防御的代码及函数的作用

审计impossible难度的代码

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input(获取输入)
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );    //stripslashes为转义

    // Split the IP into 4 octects(将IP分为4个字节)
    $octet = explode( ".", $target );

    // Check IF each octet is an integer(检查每个八位字节是否为整数)
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.(如果4个字节都为整型,就把IP放在一起)
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // Determine OS and execute the ping command.(确定操作系统并执行ping命令)
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows(窗口)
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }

        // Feedback for the end user(为终端用户提供反馈)
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token(生成一个令牌)
generateSessionToken();

?>

函数的作用

isset()函数

检查变量是否存在,并且是非空

当给定的变量存在并值不是 NULL 或者 false,则该函数返回 true;否则,返回 false。

如果变量已经被 unset 或者从未被赋值过,则该函数也会返回 false。

<?php
$my_var = 'Hello World';
if(isset($my_var)) {
    echo '$my_var is set';
} else {
    echo '$my_var is not set';
}
?>         //输出结果 $my_var is set

checkToken()函数

函数用于防止跨站请求伪造(CSRF)攻击,是一个攻击手段,恶意网站通过构造特殊的链接,诱使用户的浏览器发送请求到受害网站,从而执行非法操作

<?php
//定义checkToken()函数
function checkToken($token) {
    // 假设$validToken是一个有效的访问令牌
    $validToken = "abc123";

    // 验证传入的令牌是否与有效令牌匹配
    if ($token === $validToken) {
        return true; // 令牌有效
    } else {
        return false; // 令牌无效
    }
}

// 获取用户提交的访问令牌
$userToken = $_POST['token'];

// 调用checkToken()函数验证用户的访问令牌
if (checkToken($userToken)) {
    echo "he access token is valid and allows the user to access the page";
} else {
    echo "The access token is invalid and access is denied";
}
?>

输出结果为,报错提示是未定义token值

传入post参数,输出

stripslashes()函数

由于使用了 addslashes() 函数,所有的双引号都被转换成了 \"

<?php
$str = "This is some text with a \"quoted\" word";

//添加转义字符
$str = addslashes($str);
echo $str;
echo "<br>";

//删除转义字符
$str = stripslashes($str);v
echo $str;      
?>
//输出结果是This is some text with a \"quoted\" word
//         This is some text with a "quoted" word

explode()函数

是PHP中用来将字符串分割成数组的函数。

它接受两个参数,第一个参数是分隔符,用来指定在哪里分割字符串,第二个参数是要分割的字符串。然后将字符串分割成数组,并返回该数组。

<?php
$str = "apple,banana,orange";
$arr = explode(",", $str);
print_r($arr);       //输出结果Array ( [0] => apple [1] => banana [2] => orange ) 
?>

is_numeric()函数

PHP中的一个内置函数,用于检查一个变量是否是一个数字或者数字字符串。如果变量是数字或者数字字符串,该函数将返回true,否则返回false。

<?php
$var1 = 123;
$var2 = "456";
$var3 = "abc";

var_dump(is_numeric($var1));         // 输出结果 bool(true)
var_dump(is_numeric($var2));         // 输出结果 bool(true)
var_dump(is_numeric($var3));         // 输出结果 bool(false)
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值