国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial PHP Master | überwachungsdateiintegrit?t

PHP Master | überwachungsdateiintegrit?t

Mar 03, 2025 am 08:26 AM

PHP Master | Monitoring File Integrity

Schlüsselpunkte

  • überwachungsdateiintegrit?t ist für das Website -Management von wesentlicher Bedeutung und hilft zu erkennen, wann Dateien hinzugefügt, ge?ndert, gel?scht oder von b?swillig besch?digt werden. Das Hischen des Inhalts einer Datei ist eine zuverl?ssige M?glichkeit, solche ?nderungen zu überwachen.
  • PHPs hash_file() -Funktion kann verwendet werden, um eine Dateistrukturkonfigurationsdatei zur überwachung zu erstellen. Der Hash -Wert jeder Datei kann für sp?tere Vergleiche gespeichert werden, um ?nderungen zu erkennen.
  • Sie k?nnen eine Datenbanktabelle festlegen, um den Hash -Wert einer Datei zu speichern, wobei file_path den Pfad der Datei auf dem Server speichert und file_hash den Hash -Wert einer Datei speichert.
  • PHPs RecursiveDirectoryIterator -Klass kann verwendet werden, um den Dateibaum zu durchqueren und Hashes zum Vergleich zu sammeln. Die integrity_hashes -Datenbank kann dann mit diesen Hashes aktualisiert werden. Die array_diff_assoc() -Funktion von PHP kann verwendet werden, um Unterschiede zu überprüfen, mit denen Dateien identifiziert wurden, die hinzugefügt, gel?scht oder ge?ndert wurden.

Arbeiten Sie in verschiedenen Situationen im Website -Management

zusammen.

    überlegen Sie, wie Sie bei der Verwaltung einer Website die folgenden Situationen l?sen k?nnen:
  • versehentlich Hinzufügen, ?ndern oder L?schen von Dateien
  • b?sartig hinzufügen, ?ndern oder l?schen Sie Dateien
Dateien sind besch?digt

, was noch wichtiger ist, wissen Sie, ob einer davon passiert? Wenn Ihre Antwort Nein lautet, lesen Sie bitte weiter. In diesem Handbuch werde ich demonstrieren, wie Sie eine Dateistrukturkonfigurationsdatei erstellen, mit der die Integrit?t der Datei überwacht werden kann. hash_file()

Der beste Weg, um festzustellen, ob eine Datei ge?ndert wurde, besteht darin, ihren Inhalt zu hassten. PHP liefert mehrere Hash -Funktionen, aber für dieses Projekt habe ich beschlossen, die

-Funktion zu verwenden. Es bietet eine Vielzahl verschiedener Hashing -Algorithmen, mit denen mein Code einfach zu ?ndern ist, wenn ich mich sp?ter entscheide, ihn sp?ter zu ?ndern. Hash wird in einer Vielzahl von Anwendungen verwendet, vom Kennwortschutz bis zur DNA -Sequenzierung. Der Hashing-Algorithmus funktioniert, indem Daten in eine wiederholbare verschlüsselte Zeichenfolge mit fester Gr??e konvertiert werden. Sie sind so konzipiert, dass selbst geringfügige Modifikationen an den Daten sehr unterschiedliche Ergebnisse erzielen sollten. Wenn zwei oder mehr verschiedene Daten das gleiche Zeichenfolgenergebnis erzielen, wird sie als "Konflikt" bezeichnet. Die St?rke jedes Hashing -Algorithmus kann anhand seiner Geschwindigkeit und Wahrscheinlichkeit der Kollision gemessen werden. In meinem Beispiel werde ich den SHA-1-Algorithmus verwenden, da er schnell ist, eine geringe Konfliktwahrscheinlichkeit hat und weit verbreitet und vollst?ndig getestet wurde. Natürlich k?nnen Sie gerne andere Algorithmen recherchieren und jeden Algorithmus verwenden, den Sie m?gen. Nach dem Erhalt des Hash -Werts der Datei kann er für einen sp?teren Vergleich gespeichert werden. Wenn die Datei -Hashing sp?ter nicht dieselbe Hash -Zeichenfolge wie zuvor zurückgibt, wissen wir, dass die Datei ge?ndert wurde.

Datenbank

Erstens müssen wir eine Basistabelle layout, um den Hash -Wert der Datei zu speichern. Ich werde das folgende Muster verwenden:
CREATE TABLE integrity_hashes (
    file_path VARCHAR(200) NOT NULL,
    file_hash CHAR(40) NOT NULL,
    PRIMARY KEY (file_path)
);

file_path Der Pfad zur Datei auf dem Speicherserver, da der Wert immer eindeutig ist (da zwei Dateien im Dateisystem nicht denselben Speicherort belegen), ist dies unser Hauptschlüssel. Ich habe seine maximale L?nge auf 200 Zeichen angegeben, was einige l?ngere Dateipfade erm?glichen sollte. file_hash speichert den Hash-Wert der Datei, der eine SHA-1 40-Charakter-Hexadezimalzeichenfolge ist.

sammeln Sie Dateien

Der n?chste Schritt besteht darin, die Konfigurationsdatei für die Dateistruktur zu erstellen. Wir definieren den Pfad, Dateien zu sammeln und jedes Verzeichnis rekursiv zu iterieren, bis wir den gesamten Zweig des Dateisystems überschreiben und bestimmte Verzeichnisse oder Dateierweiterungen optional ausschlie?en k?nnen. Wir sammeln die erforderlichen Hash -Werte, wenn sie den Dateibaum durchqueren und dann in der Datenbank oder zum Vergleich speichern. PHP bietet verschiedene M?glichkeiten, den Dateibaum zu durchqueren. RecursiveDirectoryIterator

<?php
define("PATH", "/var/www/");
$files = array();

// 要獲取的擴展名,空數(shù)組將返回所有擴展名
$ext = array("php");

// 要忽略的目錄,空數(shù)組將檢查所有目錄
$skip = array("logs", "logs/traffic");

// 構建配置文件
$dir = new RecursiveDirectoryIterator(PATH);
$iter = new RecursiveIteratorIterator($dir);
while ($iter->valid()) {
    // 跳過不需要的目錄
    if (!$iter->isDot() && !in_array($iter->getSubPath(), $skip)) {
        // 獲取特定文件擴展名
        if (!empty($ext)) {
            // PHP 5.3.4: if (in_array($iter->getExtension(), $ext)) {
            if (in_array(pathinfo($iter->key(), PATHINFO_EXTENSION), $ext)) {
                $files[$iter->key()] = hash_file("sha1", $iter->key());
            }
        } else {
            // 忽略文件擴展名
            $files[$iter->key()] = hash_file("sha1", $iter->key());
        }
    }
    $iter->next();
}
Beachten Sie, dass ich denselben Ordner zweimal im

-Array bezog. Nur weil ich mich entschlossen habe, ein bestimmtes Verzeichnis zu ignorieren, hei?t das nicht, dass der Iterator je nach Ihren Bedürfnissen auch alle Subdirektoren ignoriert, was nützlich oder ?rgerlich sein kann. Die $skip Klasse gibt uns Zugriff auf mehrere Methoden: logs RecursiveDirectoryIterator

    überprüfen Sie, ob wir gültige Dateien
  • verwenden valid()
  • Bestimmen Sie, ob das Verzeichnis "oder" .. "
  • ist isDot()
  • kehren Sie zum Ordnernamen zurück, in dem sich der Dateizeiger derzeit
  • befindet getSubPath()
  • Gibt den vollst?ndigen Pfad und den Dateinamen
  • zurück key()
  • starten Sie die Schleife
  • neu next()
  • Es sind noch viele weitere Methoden verfügbar, aber die oben aufgeführte Methoden sind jedoch die ben?tigten Methoden, obwohl die
-Methode in Php 5.3.4 hinzugefügt wurde, wodurch die Dateierweiterung zurückgegeben wird. Wenn Ihre PHP -Version es unterstützt, k?nnen Sie sie verwenden, um unerwünschte Eintr?ge anstelle dessen zu filtern, anstatt das, was ich mit

gemacht habe. Nach der Ausführung sollte der Code das getExtension() -Array mit ?hnlichen Ergebnissen ausfüllen wie: pathinfo() $files

Nach dem Erstellen der Konfigurationsdatei ist es sehr einfach, die Datenbank zu aktualisieren.
<code>Array
(
    [/var/www/test.php] => b6b7c28e513dac784925665b54088045cf9cbcd3
    [/var/www/sub/hello.php] => a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
    [/var/www/sub/world.php] => da39a3ee5e6b4b0d3255bfef95601890afd80709
)</code>

<?php
$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME,
    DB_USER, DB_PASSWORD);

// 清除舊記錄
$db->query("TRUNCATE integrity_hashes");

// 插入更新的記錄
$sql = "INSERT INTO integrity_hashes (file_path, file_hash) VALUES (:path, :hash)";
$sth = $db->prepare($sql);
$sth->bindParam(":path", $path);
$sth->bindParam(":hash", $hash);
foreach ($files as $path => $hash) {
    $sth->execute();
}
überprüfen Sie die Differenz

Sie wissen nun, wie Sie eine neue Konfigurationsdatei für die Verzeichnisstruktur erstellen und die Datens?tze in der Datenbank aktualisieren. Der n?chste Schritt besteht darin, es zu einer echten Anwendung zu kombinieren, wie z. B. einen Cron -Job mit E -Mail -Benachrichtigungen, einer Administratorschnittstelle oder irgendetwas anderem, das Sie m?gen. Wenn Sie nur eine Liste ge?nderter Dateien sammeln m?chten, ohne sich darum zu kümmern, wie sie sich ?ndern, ist es am einfachsten, die Daten aus der Datenbank in ein Array zu extrahieren, das der

?hnlich ist, und die

-Funktion von PHP verwenden, um unerwünschte Inhalte zu entfernen. $files

CREATE TABLE integrity_hashes (
    file_path VARCHAR(200) NOT NULL,
    file_hash CHAR(40) NOT NULL,
    PRIMARY KEY (file_path)
);

In diesem Beispiel wird $diffs mit allen gefundenen Unterschieden bev?lkert, oder wenn die Dateistruktur abgeschlossen ist, ist es ein leeres Array. Im Gegensatz zu array_diff() verwendet array_diff_assoc() den Schlüssel im Vergleich, was im Konflikt wichtig ist, z. B. zwei leere Dateien haben den gleichen Hash -Wert. Wenn Sie noch einen Schritt weiter gehen m?chten, k?nnen Sie eine einfache Logik hinzufügen, um genau zu bestimmen, wie die Datei betroffen ist, unabh?ngig davon, ob sie gel?scht, ge?ndert oder hinzugefügt wird.

<?php
define("PATH", "/var/www/");
$files = array();

// 要獲取的擴展名,空數(shù)組將返回所有擴展名
$ext = array("php");

// 要忽略的目錄,空數(shù)組將檢查所有目錄
$skip = array("logs", "logs/traffic");

// 構建配置文件
$dir = new RecursiveDirectoryIterator(PATH);
$iter = new RecursiveIteratorIterator($dir);
while ($iter->valid()) {
    // 跳過不需要的目錄
    if (!$iter->isDot() && !in_array($iter->getSubPath(), $skip)) {
        // 獲取特定文件擴展名
        if (!empty($ext)) {
            // PHP 5.3.4: if (in_array($iter->getExtension(), $ext)) {
            if (in_array(pathinfo($iter->key(), PATHINFO_EXTENSION), $ext)) {
                $files[$iter->key()] = hash_file("sha1", $iter->key());
            }
        } else {
            // 忽略文件擴展名
            $files[$iter->key()] = hash_file("sha1", $iter->key());
        }
    }
    $iter->next();
}

Wenn wir die Ergebnisse in der Datenbank durchqueren, führen wir mehrere überprüfungen durch. Verwenden Sie zun?chst array_key_exists(), um zu überprüfen, ob der Dateipfad in unserer Datenbank in $files angezeigt wird. Wenn nicht, muss die Datei gel?scht worden sein. Zweitens, wenn die Datei vorhanden ist, der Hash nicht übereinstimmt, muss die Datei ge?ndert oder nicht ge?ndert worden sein. Wir speichern jede überprüfung in ein tempor?res Array namens $tmp. Wenn die Nummer in $files gr??er als die Zahl in der Datenbank ist, wissen wir, dass die verbleibenden nicht überprüften Dateien hinzugefügt wurden. Sobald $diffs entweder ein leeres Array ist oder alle Unterschiede in Form eines mehrdimensionalen Arrays enth?lt, das so aussehen k?nnte:

<code>Array
(
    [/var/www/test.php] => b6b7c28e513dac784925665b54088045cf9cbcd3
    [/var/www/sub/hello.php] => a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
    [/var/www/sub/world.php] => da39a3ee5e6b4b0d3255bfef95601890afd80709
)</code>

Um die Ergebnisse in einem benutzerfreundlicheren Format (z. B. der Verwaltungsschnittstelle) anzuzeigen, k?nnen Sie beispielsweise die Ergebnisse iterieren und sie als Bulleted-Listen ausgeben.

<?php
$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME,
    DB_USER, DB_PASSWORD);

// 清除舊記錄
$db->query("TRUNCATE integrity_hashes");

// 插入更新的記錄
$sql = "INSERT INTO integrity_hashes (file_path, file_hash) VALUES (:path, :hash)";
$sth = $db->prepare($sql);
$sth->bindParam(":path", $path);
$sth->bindParam(":hash", $hash);
foreach ($files as $path => $hash) {
    $sth->execute();
}

Zu diesem Zeitpunkt k?nnen Sie einen Link zur Verfügung stellen, um den Betrieb der Aktualisierung der Datenbank mit der neuen Dateistruktur auszul?sen (in diesem Fall k?nnen Sie $files in einer Sitzungsvariablen speichern) oder wenn Sie die Unterschiede nicht genehmigen, k?nnen Sie sie bei Bedarf verarbeiten.

Zusammenfassung

Ich hoffe, dieser Leitfaden hilft Ihnen dabei, die überwachung der Dateiintegrit?t besser zu verstehen. Die Installation solcher Inhalte auf Ihrer Website ist eine wertvolle Sicherheitsma?nahme, und Sie k?nnen sicher sein, dass Ihre Dateien mit Absicht gleich bleiben. Vergessen Sie natürlich nicht, regelm??ig zu sichern. falls.

(Der FAQ-Teil des Originaltext

Das obige ist der detaillierte Inhalt vonPHP Master | überwachungsdateiintegrit?t. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Variabler PHP -Bereich erkl?rt Variabler PHP -Bereich erkl?rt Jul 17, 2025 am 04:16 AM

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Wie behandle ich Datei -Uploads sicher in PHP? Wie behandle ich Datei -Uploads sicher in PHP? Jul 08, 2025 am 02:37 AM

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Code in PHP aus dem Code ausgehen Code in PHP aus dem Code ausgehen Jul 18, 2025 am 04:57 AM

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

Tipps zum Schreiben von PHP -Kommentaren Tipps zum Schreiben von PHP -Kommentaren Jul 18, 2025 am 04:51 AM

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Wie arbeiten Generatoren in PHP? Wie arbeiten Generatoren in PHP? Jul 11, 2025 am 03:12 AM

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

PHP lernen: Ein Anf?ngerführer PHP lernen: Ein Anf?ngerführer Jul 18, 2025 am 04:54 AM

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile

SchnellpHP -Installations -Tutorial SchnellpHP -Installations -Tutorial Jul 18, 2025 am 04:52 AM

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

So greifen Sie in einer Zeichenfolge nach Index in PHP auf ein Zeichen zu So greifen Sie in einer Zeichenfolge nach Index in PHP auf ein Zeichen zu Jul 12, 2025 am 03:15 AM

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

See all articles