Apache 2はデフォルトで、すべてのリクエストのクエリ文字列を含むリクエストURI全体をログに記録します。
Apache 2 Webサーバーがパスワードやクレジットカード番号などの機密データをログに記録するのを防ぎながら、残りのリクエストをログに記録する簡単な方法は何ですか?
Apacheがデフォルトで行うように、試行されたユーザー名を含むすべてのログイン試行をログに記録し、Apacheがパスワードを直接ログに記録しないようにします。
Apache 2のドキュメントを調べましたが、これらのリクエストのログ記録を完全に防止する以外に、これを行う簡単な方法はないようです(SetEnvIfを使用)。
どうすればこれを達成できますか?
Apache 2はデフォルトで、すべてのリクエストのクエリ文字列を含むリクエストURI全体をログに記録します。
Apache 2 Webサーバーがパスワードやクレジットカード番号などの機密データをログに記録するのを防ぎながら、残りのリクエストをログに記録する簡単な方法は何ですか?
URIで機密情報をQueryStringとして送信していることを正しく読んでいますか?そもそもそうなるようにアプリケーションを変更することをお勧めします。
その場合、デフォルトではそのようなことを行わないため、Apacheを変更する必要はありません。
CustomLogディレクティブをsedマジックのビットと組み合わせることで、access.logに入る前にパスワードをマスクできます( https://stackoverflow.com/a/9473943/10217 で説明されているように):
これにより、/ your/path/access.logでpassword=secret
が出現するたびにpassword=[FILTERED]
に置き換えられます。
CustomLog "|/bin/sed -u -E s/'param=[^& \t\n]*'/'param=\[FILTERED\]'/g >> /your/path/access.log" combined
そうは言っても、可能であれば、クエリ文字列に機密データを入れないようにするのが最善です。
GETとPOSTの違い を読み、アプリケーションを書き直して、GETパラメーターへのパスワードと情報の入力を停止します。
ログフェーズ中に、 LuaHookLog (mod_lua)を使用して一部のリクエストパラメータを変更できます。リクエスト行(「結合」ログ形式の%r)は読み取り専用ですが、クエリ文字列を直接マスクしてから、すべてのログ形式を微調整して使用することができます。クエリ文字列でpassword = XXXをマスクするには、次の手順を実行します。
/etc/Apache2/log_mask.luaを作成します。
function log_mask_password(r)
if r.args then
r.args = r.args:gsub("([pP][aA][sS][sS][wW][oO][rR][dD])=[^&=]*(&?)", "%1=XXX%2")
end
return Apache2.OK
end
a2enmod lua
を使用してApacheでmod_luaを有効にします
apache構成のどこかにluaログフックを設定します。
<IfModule lua_module>
LuaHookLog /etc/Apache2/log_mask.lua log_mask_password
</IfModule>
「%r」の代わりに「%m%U%q%H」を使用するようにLogFormatを修正します。例えば。:
LogFormat "%a %l %u %t \"%m %U%q %H\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
他のすべてのログ形式も修正して、すべてのログ形式でパスワードが漏洩するのを防ぐことを忘れないでください。
また、luaコードでreturn Apache2.DONE
を実行するだけで、ログメッセージを完全に削除できます(これは、機密データパターンマッチングがいくつかある別のコードになります)。
警告:信頼できないユーザー(およびApache構成を変更する権限を持つユーザー)と共有されているサーバーでluaモジュールを使用することはお勧めしませんファイル)、httpdの内部動作を変更するために悪用される可能性があるため。