web-dev-qa-db-ja.com

Apache2サーバーが機密データをログに記録しないようにする

Apache 2はデフォルトで、すべてのリクエストのクエリ文字列を含むリクエストURI全体をログに記録します。

Apache 2 Webサーバーがパスワードやクレジットカード番号などの機密データをログに記録するのを防ぎながら、残りのリクエストをログに記録する簡単な方法は何ですか?

Apacheがデフォルトで行うように、試行されたユーザー名を含むすべてのログイン試行をログに記録し、Apacheがパスワードを直接ログに記録しないようにします。

Apache 2のドキュメントを調べましたが、これらのリクエストのログ記録を完全に防止する以外に、これを行う簡単な方法はないようです(SetEnvIfを使用)。

どうすればこれを達成できますか?

5
jstr

Apache 2はデフォルトで、すべてのリクエストのクエリ文字列を含むリクエストURI全体をログに記録します。

Apache 2 Webサーバーがパスワードやクレジットカード番号などの機密データをログに記録するのを防ぎながら、残りのリクエストをログに記録する簡単な方法は何ですか?

URIで機密情報をQueryStringとして送信していることを正しく読んでいますか?そもそもそうなるようにアプリケーションを変更することをお勧めします。

その場合、デフォルトではそのようなことを行わないため、Apacheを変更する必要はありません。

6
Ram Prasad

CustomLogディレクティブをsedマジックのビットと組み合わせることで、access.logに入る前にパスワードをマスクできます( https://stackoverflow.com/a/9473943/10217 で説明されているように):

これにより、/ your/path/access.logpassword=secretが出現するたびにpassword=[FILTERED]に置き換えられます。

CustomLog "|/bin/sed -u -E s/'param=[^& \t\n]*'/'param=\[FILTERED\]'/g >> /your/path/access.log" combined

そうは言っても、可能であれば、クエリ文字列に機密データを入れないようにするのが最善です。

12
miek

GETとPOSTの違い を読み、アプリケーションを書き直して、GETパラメーターへのパスワードと情報の入力を停止します。

3
jldugger

ログフェーズ中に、 LuaHookLog (mod_lua)を使用して一部のリクエストパラメータを変更できます。リクエスト行(「結合」ログ形式の%r)は読み取り専用ですが、クエリ文字列を直接マスクしてから、すべてのログ形式を微調整して使用することができます。クエリ文字列でpassword = XXXをマスクするには、次の手順を実行します。

  1. /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
    
  2. a2enmod luaを使用してApacheでmod_luaを有効にします

  3. apache構成のどこかにluaログフックを設定します。

    <IfModule lua_module>
        LuaHookLog /etc/Apache2/log_mask.lua log_mask_password
    </IfModule>
    
  4. 「%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の内部動作を変更するために悪用される可能性があるため。

0
krushik