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

ホームページ バックエンド開発 PHPチュートリアル PHPマスター|ファイルの完全性を監(jiān)視します

PHPマスター|ファイルの完全性を監(jiān)視します

Mar 03, 2025 am 08:26 AM

PHP Master | Monitoring File Integrity

キーポイント

  • ファイルの統(tǒng)合性の監(jiān)視は、ウェブサイト管理に不可欠であり、ファイルが追加、変更、削除、または悪意のある破損時期を検出するのに役立ちます。ファイルの內(nèi)容をハッシュすることは、このような変更を監(jiān)視する信頼できる方法です。
  • PHPのhash_file()関數(shù)を使用して、監(jiān)視用のファイル構(gòu)造構(gòu)成ファイルを作成できます。各ファイルのハッシュ値は、後で比較するために保存して、変更を検出できます。
  • データベーステーブルを設(shè)定して、ファイルのハッシュ値を保存することができます。ここで、サーバー上にファイルのパスを保存し、ファイルのハッシュ値を保存します。 file_path file_hashPHPのクラスを使用して、ファイルツリーを通過し、比較のためにハッシュを収集できます。その後、これらのハッシュを使用して
  • データベースを更新できます。 PHPの
  • 関數(shù)は、違いを確認するために使用できます。これにより、追加、削除、または変更されたファイルの識別に役立ちます。 RecursiveDirectoryIterator integrity_hashes array_diff_assoc()
  • ウェブサイト管理のさまざまな狀況

ウェブサイトを管理するときに次の狀況を解決する方法を検討してください:

ファイル

を誤って追加、変更、または削除します
    ファイルを悪意を持って追加、変更、または削除します
  • ファイルが破損しています
  • さらに重要なことは、これらのいずれかが起こるかどうか知っていますか?あなたの答えがノーの場合は、読み続けてください。このガイドでは、ファイルの整合性を監(jiān)視するために使用できるファイル構(gòu)造構(gòu)成ファイルを作成する方法を示します。
ファイルが変更されたかどうかを判斷する最良の方法は、その內(nèi)容をハッシュすることです。 PHPは複數(shù)のハッシュ関數(shù)を提供しますが、このプロジェクトでは、

関數(shù)を使用することにしました。さまざまな異なるハッシュアルゴリズムを提供します。これにより、後で変更することを決定した場合にコードを簡単に変更できます。ハッシュは、パスワード保護からDNAシーケンスまで、さまざまなアプリケーションで使用されます。ハッシュアルゴリズムは、データを固定サイズの再現(xiàn)可能な暗號化された文字列に変換することにより機能します。データをわずかに変更しても、非常に異なる結(jié)果が生じるように設(shè)計されています。 2つ以上の異なるデータが同じ文字列結(jié)果を生成する場合、「競合」と呼ばれます。各ハッシュアルゴリズムの強度は、衝突の速度と確率によって測定できます。私の例では、SHA-1アルゴリズムは高速で、競合の可能性が低く、広く使用され、完全にテストされているため、SHA-1アルゴリズムを使用します。もちろん、他のアルゴリズムを調(diào)査し、好きなアルゴリズムを使用することを歓迎します。ファイルのハッシュ値を取得した後、後で比較するために保存できます。後でファイルのハッシュが以前と同じハッシュ文字列を返さない場合、ファイルが変更されたことがわかります。

hash_file()データベース

最初に、ファイルのハッシュ値を保存するためにベーステーブルをレイアウトする必要があります。次のパターンを使用します:

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

file_pathストレージサーバー上のファイルへのパスは、値が常に一意であるため(2つのファイルがファイルシステムで同じ場所を占有できないため)、それが私たちの主キーです。最大長さを200文字に指定しました。これにより、ファイルパスが長くなるようになりました。 file_hashファイルのハッシュ値を保存します。これは、SHA-1 40文字の16進數(shù)文字列になります。

ファイルを収集します

次のステップは、ファイル構(gòu)造の構(gòu)成ファイルを構(gòu)築することです。ファイルの収集を開始するパスを定義し、ファイルシステムのブランチ全體を上書きし、オプションで特定のディレクトリまたはファイル拡張子を除外するまで、各ディレクトリを再帰的に反復します。ファイルツリーを通過するときに必要なハッシュ値を収集し、データベースに保存するか比較のために収集します。 PHPは、ファイルツリーを通過するいくつかの方法を提供します。 RecursiveDirectoryIterator

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

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

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

// 構(gòu)建配置文件
$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();
}

配列で同じフォルダーを2回參照したことに注意してください。特定のディレクトリを無視することを選択したからといって、イテレーターがあなたのニーズに応じてすべてのサブディレクターを無視していることを意味するわけではありません。 $skipクラスは、複數(shù)の方法へのアクセスを提供します:logs RecursiveDirectoryIterator

    有効なファイルを使用しているかどうかを確認
  • valid()
  • ディレクトリが「..」であるかどうかを決定します
  • isDot()ファイルポインターが現(xiàn)在配置されているフォルダー名に戻ります
  • getSubPath()フルパスとファイル名を返してください
  • key()ループを再起動します
  • next()さらに多くの方法がありますが、ほとんどの場合、上記のリストはすべて必要なメソッドですが、
  • メソッドはPHP 5.3.4に追加され、ファイル拡張子を返します。 PHPバージョンがサポートしている場合、それを使用して、私が
で行ったことではなく、不要なエントリをフィルタリングできます。実行後、コードは次のような結(jié)果を

配列に記入する必要があります。 getExtension() pathinfo()構(gòu)成ファイルを構(gòu)築した後、データベースを簡単に更新できます。 $files

<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();
}

ディレクトリ構(gòu)造用の新しい構(gòu)成ファイルを構(gòu)築する方法と、データベース內(nèi)のレコードを更新する方法がわかりました。次のステップは、電子メール通知を備えたCronジョブ、管理インターフェイス、または他のものなど、何らかの実際のアプリケーションに結(jié)合することです。変更を気にせずに変更されたファイルのリストを収集したい場合、最も簡単な方法は、データベースからデータをと同様の配列に抽出し、PHPの関數(shù)を使用して不要なコンテンツを削除することです。

CREATE TABLE integrity_hashes (
    file_path VARCHAR(200) NOT NULL,
    file_hash CHAR(40) NOT NULL,
    PRIMARY KEY (file_path)
);
この例では、には見つかった違いがあります。または、ファイル構(gòu)造が完了した場合は、空の配列になります。

とは異なり、2つの空のファイルには同じハッシュ値があるなど、競合するときに重要です。これは重要です。さらに一歩進めたい場合は、簡単なロジックを追加して、ファイルがどのように影響を受けるか、削除、変更、または追加されているかどうかを正確に判斷できます。 $diffs array_diff() array_diff_assoc()データベースで結(jié)果を通過すると、複數(shù)のチェックを行います。まず、

を使用して、データベース內(nèi)のファイルパスが
<?php
define("PATH", "/var/www/");
$files = array();

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

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

// 構(gòu)建配置文件
$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();
}
に表示されるかどうかを確認します。そうでない場合は、ファイルが削除されている必要があります。次に、ファイルが存在するがハッシュが一致しない場合、ファイルが変更されているか変更されていない必要があります。各チェックを

と呼ばれる一時配列に保存し、最後に、array_key_exists()の數(shù)値がデータベースの數(shù)値よりも大きい場合、殘りのチェックされていないファイルが追加されていることがわかります。完了したら、$filesは空の配列であるか、多次元配列の形で見つかった違いを含んでいます。これは次のようになります。 $tmp $filesよりユーザーフレンドリーな形式(管理インターフェイスなど)で結(jié)果を表示するには、たとえば結(jié)果を反復し、箇條書きリストとして出力できます。 $diffs

この時點で、新しいファイル構(gòu)造でデータベースを更新する操作をトリガーするリンクを提供できます(この場合、セッション変數(shù)に
<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();
}
概要

$files

このガイドが、ファイルの整合性監(jiān)視をよりよく理解するのに役立つことを願っています。このようなコンテンツをWebサイトにインストールすることは貴重なセキュリティ尺度であり、ファイルが意図したものと同じままであることを保証できます。もちろん、定期的にバックアップすることを忘れないでください。萬一に備えて。

(元のテキストのFAQ部分はここで保持する必要があります。なぜなら、この部分の內(nèi)容はコード部分とは関係がなく、補足的な説明に屬し、擬似オリジニティのカテゴリに該當しないため)

以上がPHPマスター|ファイルの完全性を監(jiān)視しますの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場合は、參照を渡す必要があります。これらのルールを習得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時にネストを避ける必要があります。

発電機はPHPでどのように機能しますか? 発電機はPHPでどのように機能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

PHPの學習:初心者向けガイド PHPの學習:初心者向けガイド Jul 18, 2025 am 04:54 AM

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 Jul 12, 2025 am 03:15 AM

PHPでは、四角い括弧または巻き毛裝具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお勧めします。インデックスは0から始まり、範囲外のアクセスはnull値を返し、値を割り當てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結(jié)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(shù)を均一に使用することをお勧めします。

クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

See all articles