一个跨行小白的第一次审计:
if( isset( $_POST[ 'Submit' ] ) ) {
//if判断语句,isset检测通过post传递的变量值是否生命并且其值不为null《null=0》
if( isset( $_POST[ 'Submit' ] ) ) {
//if判断语句,isset检测通过post传递的变量值是否生命并且其值不为null《null=0》
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Check Anti-CSRF token 在用户提交表单时验证表单 token 的有效性,以防止跨站点请求伪造(CSRF)攻击。并且在用户注销时删除token值
$target = $_REQUEST[ 'ip' ];
//定义验证后的ip
$target = stripslashes( $target );
//使用 stripslashes() 函数将其解除转义,并返回一个新的没有转义的字符串。
// Split the IP into 4 octects
$octet = explode( ".", $target );
//explode() 函数用于将一个字符串按照指定的分隔符拆分成多个子字符串,并将这些子字符串存储在数组中。
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
// Check IF each octet is an integer 将一段 IP 地址字符串 $target 拆分成了一个数组 $octet,而每个数组元素均为一个字符串类型。要检查每个数组元素是否均为整数,我们可以遍历 $octet 数组,然后对于每个元素使用 is_numeric() 函数检查其是否为数值类型,如果是,则将其转换为整数类型进行后续操作。
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
// Determine OS and execute the ping command.确定操作系统并执行ping命令。
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
//区分系统大小写并且返回系统信息
$cmd = shell_exec( 'ping ' . $target );
//输出结果如果是Windows的系统将平
}
else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
//如果是其他的系统例如像linx的会一直ping-c则确定了ping的次数
}
// 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>';
} //错误输出时会报错回显出你输入了一个错误的IP地址
}
// Generate Anti-CSRF token 生成反CSRF令牌
generateSessionToken();
//生成一个用于会话标识的随机字符串 token。
//CheckToken: 调用redisTokenStore 查询token的合法性,及其返回用户的部分信息。
//requestrequest:封装了用于识别用户信息的令牌。
//user_token:用于验证和识别用户的身份信息。
//session :是交互过程。
session_token:是一种在Web应用程序中用于管理用户会话的标识符。它通常是一个随机生成的字符串,用于识别特定用户的会话,并且可以用来验证用户是否已经登录。
stripslashes;反引用一个引用字符串
ecplode:使用一个字符串分割另一个字符串
is_numeric 检测变量是否为数字或数字字符串(因为上面使用的是ping命令所以这里检测是否全为数字
sizeof:count的别名用来统计数组、Countable 对象中所有元素的数量(这里ping的是四组数字字符)
stristr函数的忽略大小写版本
php_uname:返回运行 PHP 的系统的有关信息
shell_exec:命令执行函数通过shell执行命令并完整的以字符串形式输出
初次审计不喜勿喷。