You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP检测上传的文件是否为加密文件

PHP检测加密上传文件的实现方案

不同类型的加密文件都有固定的文件头特征或元数据标识,仅需读取文件头部的特征字段即可完成判定,不会占用过多服务性能,完全可以适配你的上传校验场景,具体实现方案如下:

检测加密压缩包(ZIP/RAR等)

使用PHP内置的ZipArchive类即可直接判定ZIP格式是否加密,代码示例:

$zip = new ZipArchive();
$openRes = $zip->open('/path/to/your/uploaded/file.zip');
// 返回对应错误码即为加密压缩包
if ($openRes === ZipArchive::ER_ENCRYPTED) {
    // 此处输出自定义错误提示即可
    echo "禁止上传加密的压缩包文件";
}
$zip->close();

如果需要支持RAR格式检测,安装PHP的rar扩展后,使用RarArchive类做同类逻辑判定即可。加密的Office文档(docx/xlsx/pptx)本质为加密压缩包,用上述方法也可识别。

检测加密PDF文件

PDF的加密标识会存在于文件前1KB的元数据中,无需加载整个文件即可判定,代码示例:

// 仅读取文件前1KB内容做特征匹配,性能开销极低
$pdfHeader = file_get_contents('/path/to/your/uploaded/file.pdf', false, null, 0, 1024);
// 匹配PDF加密特征字段
if (preg_match('/\/Encrypt\s+\d+\s+\d+\s+R/i', $pdfHeader)) {
    // 此处输出自定义错误提示即可
    echo "禁止上传加密的PDF文件";
}

通用优化建议

  • 校验前先通过PHP内置的finfo扩展判定文件的真实MIME类型,排除后缀伪造的无效文件,再对应执行对应类型的加密校验,减少不必要的性能消耗
  • 若需要覆盖更多加密文件类型,可调用本地命令行工具(如7z、pdfinfo)完成检测,PHP通过exec()获取返回结果即可:比如执行7z l 目标文件路径命令,若返回要求输入密码的提示即可判定为加密压缩包

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:57:00