PHP文件类型黑名单如何配置

梦枫酱_6023

梦枫酱_6023

2026-09-20

293人浏览

原创

php文件类型黑名单配置核心是服务端明确禁止特定后缀文件上传或访问,需在thinkphp5.0的url_deny_suffix中设竖线分隔字符串,自定义上传脚本中用pathinfo提取小写扩展名比对数组,并配合web服务器层.htaccess或nginx规则加固,但黑名单易被绕过,生产环境应优先使用白名单+文件头校验+重命名+非web目录存储。

php文件类型黑名单如何配置

PHP文件类型黑名单配置,核心是**在服务端明确禁止特定后缀的文件上传或访问**,不能依赖前端JS、MIME类型或大小写混淆等弱校验。实际生效的关键在于服务端逻辑控制,常见于框架配置或自定义上传处理代码中。

ThinkPHP5.0 的 url_deny_suffix 配置

该框架内置URL后缀拦截机制,用于防止敏感文件被直接访问(如 .php.log.bak):

  • 打开 application/config.php,确保启用路由并设置黑名单字符串:
    'url_route_on' => true,
    'url_deny_suffix' => 'php|log|bak|conf|ini|env'
  • 该值必须为竖线分隔的字符串,不能是数组或空值;若缺失或为空,检测完全失效
  • 不支持正则表达式,仅做后缀精确匹配;不区分大小写.PHP.Php 同样被拦截
  • 黑名单仅作用于 URL 路由解析阶段,对已上传到非Web目录的文件无影响

通用PHP上传逻辑中的黑名单实现

在自定义上传脚本(如 upload.php)中,需结合 $_FILES['file']['name'] 提取后缀并比对:

PHP
PHP

编写健壮的PHP代码,规避类型转换陷阱、数组怪癖及常见安全漏洞。

下载
  • pathinfo($filename, PATHINFO_EXTENSION) 获取扩展名,并统一转小写
  • 定义黑名单数组:$deny_ext = ['php', 'phtml', 'php3', 'php5', 'pl', 'py', 'jsp', 'asp'];
  • 严格判断:if (in_array(strtolower($ext), $deny_ext)) { die('不支持的文件类型'); }
  • 注意规避绕过:需提前 trim() 文件名首尾空格,去除末尾点(rtrim($ext, '.') ),避免 shell.php.web.php%00.jpg 类绕过

配合 Web 服务器层加固

仅靠PHP代码黑名单不够,需在 Apache/Nginx 层补充限制:

  • Apache:在上传目录下放置 .htaccess,添加:
    <filesmatch>Deny from all</filesmatch>
  • Nginx:在 server 或 location 块中配置:
    location ~ \.(php|log|bak|conf|ini)$ { deny all; }
  • 特别注意:.user.ini.htaccess 本身也应加入黑名单——否则可能被上传用于二次利用

为什么黑名单不如白名单安全?

黑名单本质是“堵漏洞”,但容易遗漏新型后缀(如 .phar.svg 中嵌入脚本)或被大小写、编码、截断等手法绕过。生产环境推荐:

  • 优先使用白名单(只允许 jpg|png|pdf|docx 等明确业务需要的类型)
  • 白名单 + 真实类型校验(finfo_file() 检查文件头)
  • 上传后重命名(如 UUID + 固定后缀)、保存至非Web可访问目录、通过代理脚本控制下载

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php 黑名单

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

8964

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5461

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1995

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3388

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4054

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3171

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4497

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3502

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11562

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习