基本信息
文件名称:Web安全与防护 实训指南 5.2.2黑名单及白名单过滤扩展名机制与绕过.pdf
文件大小:245.46 KB
总页数:4 页
更新时间:2025-03-07
总字数:约3.9千字
文档摘要

黑名单及白名单过滤扩展名机制与绕过

【实训目的】

1.理解在服务端进行扩展名检测的方法及可能存在的风险;

2.能够掌握服务器端扩展名绕过的方法。

【实训原理】

1.黑名单过滤是定义了一系列不安全的扩展名,服务器端在接收到文件后,

将其扩展名与黑名单进行匹配,如果发现匹配成功,则认为文件不合法。这种过

滤方式不够安全,因为有些危险的扩展名可能被忽略,导致危险。

2.白名单过滤是定义了允许上传的扩展名,即扩展名不在白名单内的文件

将不允许上传,其拥有比黑名单更好的防御机制,但也可能结合WEB容器的解

析漏洞绕过白名单限制。

【实训步骤】

步骤1、编写文件上传的WEB前端代码

在XAMPP的htdocs目录下建立upload2.html文件,然后用记事本等工具进

行编辑,编写以下代码:

html

head

title图片上传/title

/head

body

divstyle=margin:0auto;width:320px;height:100px;

formaction=upload2.phpmethod=POSTenctype=multipart/form-data

inputtype=filename=fileid=file/br

inputtype=submitvalue=提交name=submit/

/form

/div

/body

/html

该前端页面表单中具有文件上传的功能。

步骤2、编写后端接收文件代码

在XAMPP的htdocs目录下建立upload2.php文件,然后用记事本等工具进

行编辑,编写以下代码:

?php

header(Content-type:text/html;charset=utf-8);

$blacklist=array(php,php5,jsp,asp,asa,aspx);//黑名单

if(isset($_POST[submit])){

//将字符串编码由utf-8转到gb2312,解决中文文件不能上传问题

$name=iconv(utf-8,gb2312,$_FILES[file][name]);

$extension=substr(strrchr($name,.),1);//得到扩展名

$flag=true;

//迭代判断扩展名是否在黑名单中

foreach($blacklistas$key=$value){

if($value$extension){

$flag=false;

break;

}

}

if($flag){

$size=$_FILES[file][size];//接收文件大小

$tmp=$_FILES[file][tmp_name];//临时路径

//指定上传文件到uploadFile目录

move_uploaded_file($tmp,./uploadFile/.$name);

echo文件上传成功!

}else{

echo上传文件不合法;

}

}

?

upload.php用于接收文件,然后将文件放在uploadFile目录。

步骤3、测试程序运行情况

在浏览器URL处输入:/upload2.html,将出现文件上传对话

框,当上传文件扩展名在黑名单时,将出现“上传文件不合法”的提示,不能上

传。

步骤4、绕过服务器端黑名单检测机制

(1)分析服务器端源程