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

如何使用PHP检测上传PDF文件中的JavaScript等威胁?求简单示例

PHP检测上传PDF文件的潜在威胁

快速检测思路

PDF中的恶意内容(如JavaScript、系统命令执行逻辑)往往会包含特定标识关键词,我们可以通过读取PDF文件的文本内容,扫描这些危险关键词来实现快速初步检测。这种方法无需依赖复杂的PDF解析库,简单高效。

实现代码示例

<?php
// 检测PDF是否包含危险内容的函数
function isPdfMalicious(string $filePath): bool {
    // 定义常见的PDF恶意内容关键词
    $dangerousKeywords = [
        '/JavaScript', '/JS', 'launch', 'OpenAction',
        '/URI', '/SubmitForm', 'exec', 'system', 'shell_exec'
    ];

    // 读取文件内容(大文件可改用分段读取,避免内存溢出)
    $pdfContent = file_get_contents($filePath);
    if ($pdfContent === false) {
        return true; // 读取失败时默认视为可疑
    }

    // 忽略大小写扫描关键词
    foreach ($dangerousKeywords as $keyword) {
        if (stripos($pdfContent, $keyword) !== false) {
            return true;
        }
    }

    return false;
}

// 处理文件上传的示例逻辑
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['pdf_file'])) {
    $uploadedFile = $_FILES['pdf_file'];
    
    // 基础校验:是否为PDF(注意MIME类型可被篡改,仅作初步过滤)
    if ($uploadedFile['type'] !== 'application/pdf') {
        die('请上传PDF格式文件');
    }

    // 临时文件路径
    $tempFilePath = $uploadedFile['tmp_name'];

    // 检测是否存在恶意内容
    if (isPdfMalicious($tempFilePath)) {
        die('上传的PDF文件包含潜在威胁,禁止上传');
    }

    // 检测通过,处理文件(如移动到安全目录、重命名等)
    $targetDir = './safe_uploads/';
    if (!is_dir($targetDir)) {
        mkdir($targetDir, 0755, true);
    }
    $targetFilePath = $targetDir . uniqid() . '.pdf';
    if (move_uploaded_file($tempFilePath, $targetFilePath)) {
        echo '文件上传成功且安全';
    } else {
        echo '文件上传失败';
    }
}
?>

<!-- 上传表单示例 -->
<form method="post" enctype="multipart/form-data">
    <input type="file" name="pdf_file" accept=".pdf" required>
    <button type="submit">上传PDF</button>
</form>

注意事项

  • 这是初步检测方案:如果遇到经过混淆、加密的恶意PDF,可能无法精准识别。若需要更高精度的检测,可考虑使用专业PDF解析库(如tcpdf、FPDF的扩展工具)或调用第三方安全接口。
  • 内存优化:对于超大PDF文件,建议改用fopen分段读取并扫描,避免file_get_contents导致内存溢出。
  • 安全加固:上传后的文件务必存储在非Web可直接访问的目录,或重命名为随机文件名,防止恶意文件被直接执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:45:41