审计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)
?>