文章预览
1 函数extract()变量覆盖 extract()函数的作用是从数组中导入变量到当前符号表中,检查每个键是否是有效的变量名。它还检查与符号表中现有变量是否冲突。为了防止发生变量覆盖,在使用的时候需要将flags设置为EXTR_SKIP,以免将已有变量覆盖。 extract($_REQUEST); //使用extract造成变量覆盖 if(authenticated_user()){ //认证用户是否登录 $authorized = true; } ?> 当用户提交的参数中包含authorized = true时,在执行authenticated_user()步骤之前,extract()函数从$_REQUEST中解析到authorized并设置全局变量,它的值被设置为true。此时,用户在无须通过校验的情况下可直接向下执行,绕过了校验逻辑、造成任意越权访问。 为了避免全局变量覆盖的发生,应尽量不使用extract()函数接收客户端参数。下面是修复后的代码。 $username = $_POST['username']; $password = $_POST['password'];
………………………………