In der täglichen Entwicklung und des Betriebs und der Wartung der Website ist die Dateiintegrität ein wichtiger Bestandteil der Systemsicherheit. Sobald eine Datei manipuliert ist, kann dies bedeuten, dass das System angegriffen wurde oder Datenverletzungen verletzt wurden. Um mit dieser Situation fertig zu werden, können wir die integrierte MD5_File () -Funktion von PHP verwenden, um ein einfaches und praktisches Tool zur Erkennung von Dateiintegrität zu erstellen.
md5_file () ist eine von PHP bereitgestellte Funktion, um den MD5 -Hash -Wert einer angegebenen Datei direkt zu berechnen. Die grundlegende Syntax ist wie folgt:
md5_file(string $filename, bool $binary = false): string|false
$ Dateiname : Der zu berechnete Dateipfad.
$ Binary : Ob Hash im ursprünglichen Binärformat zurückgegeben werden soll (Standard ist falsch und eine 32-Bit-Hexadezimalstrich zurückgegeben).
Beispiel:
$hash = md5_file('example.txt');
echo $hash;
Wir haben das Werkzeug in zwei Phasen entworfen:
Generieren Sie den Benchmark -Überprüfungscode (Basislinie) : Notieren Sie die MD5 -Werte aller zu überwachenden Dateien und speichern Sie sie in einer JSON -Datei.
Periodenkennung : Berechnen Sie den MD5 -Wert der aktuellen Datei neu, vergleichen Sie ihn mit der Basisdatei und bestimmen Sie, ob er geändert, gelöscht oder hinzugefügt wurde.
function generateBaseline($dir, $baselineFile = 'baseline.json') {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
$hashes = [];
foreach ($files as $file) {
if ($file->isFile()) {
$path = str_replace('\\', '/', $file->getRealPath());
$hashes[$path] = md5_file($path);
}
}
file_put_contents($baselineFile, json_encode($hashes, JSON_PRETTY_PRINT));
echo "Die Basisdatei wurde generiert: {$baselineFile}\n";
}
// Nutzungsbeispiel
generateBaseline(__DIR__ . '/files');
Diese Funktion scursive alle Dateien im Verzeichnis von Dateien rekursiv und schreibt den vollständigen Pfad jeder Datei und ihren MD5 -Wert an baseline.json .
function checkIntegrity($dir, $baselineFile = 'baseline.json') {
if (!file_exists($baselineFile)) {
echo "Basisdatei nicht gefunden,Bitte sei eine Grundlinie。\n";
return;
}
$baseline = json_decode(file_get_contents($baselineFile), true);
$current = [];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if ($file->isFile()) {
$path = str_replace('\\', '/', $file->getRealPath());
$current[$path] = md5_file($path);
}
}
// Erkennen Sie Dateien, die geändert oder gelöscht wurden
foreach ($baseline as $path => $hash) {
if (!isset($current[$path])) {
echo "[löschen] {$path}\n";
} elseif ($current[$path] !== $hash) {
echo "[Überarbeiten] {$path}\n";
}
}
// Neue Dateien erkennen
foreach ($current as $path => $hash) {
if (!isset($baseline[$path])) {
echo "[Neu] {$path}\n";
}
}
}
// Nutzungsbeispiel
checkIntegrity(__DIR__ . '/files');
Dieses Erkennungsskript vergleicht den alten und neuen Hashes und gibt jeden Dateipfad aus, der geändert, hinzugefügt oder gelöscht wurde, damit Entwickler rechtzeitig Maßnahmen ergreifen können.
Die Testergebnisse können über E -Mails, Protokolldateien oder Webseiten angezeigt werden. Zum Beispiel:
file_put_contents('integrity_report.log', $report);
header('Location: https://m66.net/report-viewer');
Der obige Code leitet den Erkennungsbericht in die Protokolldatei um und leitet ihn dann auf eine Berichts-Viewer-Seite um, z. B. https://m66.net/report-viewer .
Durch die Funktion MD5_FILE () können wir ein effizientes Tool zur Erkennung von Dateiintegrität mit sehr wenig Code erstellen. Obwohl es keine professionellen Sicherheitsschutzwerkzeuge ersetzen kann, reicht es für kleine und mittelgroße Websites aus, um mit gemeinsamen Manipulationen Risiken umzugehen. In der tatsächlichen Bereitstellung wird empfohlen, das Skript regelmäßig als Cron -Aufgabe auszuführen und die Sicherheit in Kombination mit Benachrichtigungsmechanismen (wie E -Mail- oder Dingtalk -Robotern) weiter zu verbessern.