パラメータ付きのGETリクエストの形式で、またはPOSTリクエスト(たとえば、標準のURLエンコード、&-separated POST data)。API呼び出しをログに記録して分析したい場合、Apacheログに記録されるため、GET要求は簡単になります。POSTを取得する簡単な方法はありますかApacheログのデータも同様ですか?
(もちろん、アプリケーションでPOSTデータを明示的に記録できますが、コードでそれを心配しないようにする構成レベルの方法が必要です。)
Apacheの mod_dumpio を使用します。明らかな理由に注意してください。
Mod_dumpio 最初のヌル文字でバイナリペイロードのロギングを停止する であることに注意してください。たとえば、gzipされたファイルのmultipart/form-data
アップロードでは、おそらくmod_dumpioで最初の数バイトしか表示されません。
また、Apacheは、httpd.conf
フォルダーに存在する場合でも、/modules
でこのモジュールに言及しない場合があることに注意してください。 LoadModule
を手動で追加するだけで正常に機能します。
しかし、答えるのは遅いです。このモジュールでできること: https://github.com/danghvu/mod_dumpost
mod_security
をインストールして、/etc/modsecurity/modsecurity.conf
に入れることができます。
SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/Apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ
正確な答えではありませんが、Apache自体でこれを行う方法を聞いたことはありません。拡張モジュールで可能になると思いますが、それが書かれているかどうかはわかりません。
1つの懸念は、POSTデータはかなり大きくなる可能性があり、ログに記録する量に何らかの制限を付けないと、しばらくするとディスク領域が不足する可能性があります。ハッカーがサーバーを混乱させる可能性のあるルート。
[ModSecurity][1]
を使用してPOSTデータを表示できます。
Debian/Ubuntuにインストールします。
$ Sudo apt install libapache2-mod-security2
推奨される構成ファイルを使用します。
$ Sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Apacheをリロードします。
$ Sudo service Apache2 reload
これで、/var/log/Apache2/modsec_audit.log
の下にデータが記録されます。
$ tail -f /var/log/Apache2/modsec_audit.log
--2222229-A--
[23/Nov/2017:11:36:35 +0000]
--2222229-B--
POST / HTTP/1.1
Content-Type: application/json
User-Agent: curl
Host: example.com
--2222229-C--
{"test":"modsecurity"}
実際にアプリケーションでそれをします。もちろん、ロガーシステムにもよりますが、実行時に設定可能です。たとえば、Apache Log(log4j/cxx)を使用する場合、そのようなURL専用のロガーを構成し、実行時にXMLファイルから構成できます。
組み込みのフォレンジックログ機能を使用することもできます。
より簡単なオプションは、サーバーに到達する前にPOSTデータを記録することです。Webアプリケーションの場合、 Burp Proxy を使用し、HTTPとして使用するようにFirefoxを設定します/ Sプロキシを使用すると、データをリアルタイムで監視(およびマングル)できます。
ブラウザなしでAPIリクエストを行う場合、SoapUIは非常に便利で、同様の情報が表示される場合があります。 SoapUIをBurpを介して接続するように設定することもできると思います(ただの推測です)。