PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。 PHP没有对嵌套数组的深度强制任何过滤检查。由于变量注册是以迭代的方式执行的,因此PHP会接受任何深度,直到达到memory_limit。PHP数组的释放是以递归的方式执行的,因此在耗尽了栈极限的时候就会崩溃。 攻击者可以利用上述问题以可控的方式导致PHP崩溃。假设以下PHP代码: if (!checkUserPWD($user, $pass)) { $errmsg = \"There is problem ...\"; displayError($errmsg); notifyAdminOfCrackAttempt(); } else { // do all the fun } 在暴力猜测其他用户的口令时攻击者可能不希望通过发送大量通知邮件通知管理员,但假设目标已经激活了register globals,攻击者提供名为errmsg的深层嵌套数组遍历。然后用户名和口令检查失败,覆盖变量,导致释放用户提供的数组,这样PHP就会崩溃,攻击者可以在暴力猜测口令时不发送通知邮件。在日志文件中会有崩溃记录,但管理员无法看到起因。
PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。 PHP没有对嵌套数组的深度强制任何过滤检查。由于变量注册是以迭代的方式执行的,因此PHP会接受任何深度,直到达到memory_limit。PHP数组的释放是以递归的方式执行的,因此在耗尽了栈极限的时候就会崩溃。 攻击者可以利用上述问题以可控的方式导致PHP崩溃。假设以下PHP代码: if (!checkUserPWD($user, $pass)) { $errmsg = \"There is problem ...\"; displayError($errmsg); notifyAdminOfCrackAttempt(); } else { // do all the fun } 在暴力猜测其他用户的口令时攻击者可能不希望通过发送大量通知邮件通知管理员,但假设目标已经激活了register globals,攻击者提供名为errmsg的深层嵌套数组遍历。然后用户名和口令检查失败,覆盖变量,导致释放用户提供的数组,这样PHP就会崩溃,攻击者可以在暴力猜测口令时不发送通知邮件。在日志文件中会有崩溃记录,但管理员无法看到起因。