PHP防篡改保护机制

```html PHP防篡改保护机制:保障核心文件与数据完整性

PHP防篡改保护机制

在Web应用安全中,防止关键PHP文件(如配置文件、核心类库、许可证模块)被恶意修改至关重要。本文介绍三种实用、轻量且可落地的防篡改保护机制。

1. 文件内容哈希校验(推荐)

对敏感文件生成SHA-256哈希值并定期比对,是最直接有效的防篡改手段。

<?php
// config/integrity_check.php
define('INTEGRITY_FILE', __DIR__ . '/integrity.json');
define('PROTECTED_FILES', [
    __DIR__ . '/config.php',
    __DIR__ . '/database.php',
    __DIR__ . '/vendor/autoload.php'
]);

function generateFileHashes(): array {
    $hashes = [];
    foreach (PROTECTED_FILES as $file) {
        if (file_exists($file)) {
            $hashes[basename($file)] = hash_file('sha256', $file);
        }
    }
    return $hashes;
}

function saveIntegrityManifest(): void {
    file_put_contents(INTEGRITY_FILE, json_encode(generateFileHashes(), JSON_PRETTY_PRINT));
}

function verifyIntegrity(): bool {
    if (!file_exists(INTEGRITY_FILE)) return false;
    $expected = json_decode(file_get_contents(INTEGRITY_FILE), true);
    foreach (PROTECTED_FILES as $file) {
        $name = basename($file);
        if (!isset($expected[$name])) continue;
        $actual = hash_file('sha256', $file) ?? '';
        if ($actual !== $expected[$name]) {
            error_log("[SECURITY] Tampering detected in {$file}");
            return false;
        }
    }
    return true;
}

// 启动时校验(建议放在入口文件 index.php 开头)
if (!verifyIntegrity()) {
    http_response_code(500);
    die('System integrity check failed. Please contact administrator.');
}
?>

2. 文件时间戳+权限双重锁定

结合文件修改时间与系统权限,防止非授权写入:

<?php
function lockCriticalFiles(array $files): void {
    foreach ($files as $file) {
        if (file_exists($file)) {
            // 设置只读(Linux/macOS)
            chmod($file, 0444);
            // 记录初始mtime(用于运行时比对)
            $mtime = filemtime($file);
            if ($mtime !== (int)getenv("INIT_MTIME_".md5($file))) {
                trigger_error("Critical file {$file} has been modified!", E_USER_ERROR);
            }
        }
    }
}
?>

3. 运行时内存校验(高级防护)

在脚本执行中动态加载并校验关键代码片段:

<?php
function validateRuntimeCode(string $codeSnippet): bool {
    $expectedHash = 'a1b2c3...'; // 预先计算的合法哈希
    return hash('sha256', $codeSnippet) === $expectedHash;
}

// 示例:校验动态配置逻辑
$configLogic = file_get_contents(__DIR__.'/config_logic.php');
if (!validateRuntimeCode($configLogic)) {
    throw new RuntimeException('Config logic tampered!');
}
?>
⚠️ 注意事项: • 哈希清单(integrity.json)需存于Web不可访问目录(如 /var/www/private/); • 生产环境部署后立即执行 php config/integrity_check.php 生成初始清单; • 结合Web服务器权限控制(如Nginx禁止访问 .php 配置文件)效果更佳。

防篡改不是一劳永逸——它需要与日志审计、文件监控、最小权限原则协同实施。从今天起,在你的PHP项目中加入一次哈希校验,就是为系统筑起第一道可信防线。

```