第11关(白名单)
第12关(白名单)
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传失败";
}
} else {
$msg = "只允许上传.jpg|.png|.gif类型文件!";
}
}
查看代码, substr用于截取字符串,strrpos用于找寻字符最后一次出现的位置,整体即找寻最后一次出现的“.”的位置,+1往后一位,从这个字符串开始截取直至末尾,其直观作用就是截取文件后缀。但是$img_path拼接路径的时候直接用save_path路径,此时即可用%00在路径上直接截断,相当于后面的拼接无效,用bp修改路径
注意,其中得修改文件名为符合白名单要求的后缀,让其通过后缀的检测,此处与11关不同的是此处的save_path用的是POST请求,需修改二进制中的路径将php后的.的二进制改为00
此时即可上传成功
第13关