5

セキュリティ上の理由から、アクセスを監視できるようにしたい Web サーバー上の特定のファイルがあります。アクセスされるたびに、MySQL ログ テーブルにエントリを追加したいと考えています。このようにして、Web アプリケーション内からセキュリティ違反に積極的に対応できます。

4

3 に答える 3

1

Apache HTTP サーバーはログ機能を提供します。

サーバー アクセス ログには、サーバーによって処理されたすべての要求が記録されます。アクセス ログの場所と内容は、CustomLogディレクティブによって制御されます。LogFormatディレクティブを使用すると、ログの内容を簡単に選択できます。このセクションでは、アクセス ログに情報を記録するようにサーバーを構成する方法について説明します。

ログをファイルに書き込むために使用できます。MySQL テーブルに保存する必要がある場合は、cron ジョブを実行してファイルをデータベースにインポートします。

ログの詳細については、http: //httpd.apache.org/docs/1.3/logs.html#accesslogを参照してください。

于 2013-06-17T07:17:45.920 に答える
1

PHP7 から削除されましたが、この投稿を見つけた他の人のために、FAM (現在の PECL) 拡張機能にはいくつかのオプションがあります。この関数http://php.net/manual/en/function.fam-monitor-file.phpは、ここで必要なものを説明しているようです

さらに、 http://php.net/manual/en/function.stat.phpでファイルのステータスに関する多くの詳細にアクセスできます。これを cron またはスリープ ドリブン スクリプト内に配置すると、いつ変更されたかを確認できます。

于 2016-09-21T07:12:58.023 に答える
0

このファイルには、次の 3 つのポイントからアクセスできます。

  1. ファイルシステムへの直接アクセス
  2. のような URL を呼び出しwww.example.com/importantfile.jpgます (Apache がファイルを提供します)。
  3. www.example.com/readfile.php?name=important.jpgファイルを読み取るサーバー上のいくつかのphpスクリプトを呼び出します。

ケース 2 だけが気になる場合は、Rishi Dua の解決策を確認してください。

しかし、それ以上のことが必要な場合は、fileatime()呼び出しを使用してスクリプトを作成し、それを cron に追加して、たとえば毎分実行する必要があります。

そのための擬似コード:

<?php
$previous_access_time = get_previous_access_time(); // get the previous last access time from you remembered in db or textfile or whatever
$current_access_time = fileatime('path/to/very_important_file.jpg');
if ($previous_access_time != $current_access_time) {
   log_access_to_db();
   save_new_access_time(); // update the new last access time
}

ただし、このソリューションにはいくつかの問題があります。1 つ目は、ファイルにアクセスしたユーザーのユーザー ID や IP ではなく、アクセス時間のみを取得できることです。2 つ目は、マニュアルにあるように、一部の Unix システムはアクセス時間を更新しないため、ソリューションが失敗する可能性があることです。

セキュリティについて真剣に心配している場合は、このような監査ユーティリティを確認する必要があると思います

于 2013-06-17T07:41:30.513 に答える