ルールのメッセージ情報 (トリガーされたルール) をエラーおよび/または監査ログ ファイルに表示し、応答ヘッダーでクライアントに送り返す方法を探しています。フェーズ「msg」があることは理解していますが、応答ヘッダーの情報でクライアントに送り返されないため、役に立ちません。エラーページのログの情報をhtmlで見たいのですが、どうすればいいですか?助けてくれてありがとう、ヴラディ。
2 に答える
何がうまくいかなかったのかをクライアントに知らせるのは悪い考えです。ハッカーはそれを使用して、セキュリティ フレームワークを回避できます。はるかに優れたアプローチは、mod_unique_id
カスタマイズされたエラー ページを組み合わせることです。手順:
mod_unique_id
Apache構成で有効にします- 関心のある http リターン コードのカスタマイズされたエラー ページを作成します (以下の例)。
- Apache設定でそれらを有効にします(
ErrorDocument 403 /<url_path_to>/403.php
この例の場合)
403 エラー ページの例を次に示します。呼び出してみましょう403.php
(いいえ、純粋な静的ページは機能しません)。
<?php
$protocol = $_SERVER['SERVER_PROTOCOL'];
header("$protocol 403 Forbidden");
header("Status: 403 Forbidden");
header("Connection: close");
$msg = $_SERVER["UNIQUE_ID"];
?>
<HTML><HEAD>
<TITLE>You have no access to this resource (403)</TITLE>
</HEAD><BODY>
<P>An error occured. Please tell the admin the error code: <?php echo $msg; ?></P>
</BODY></HTML>
これは、スタイリングなどのない非常に簡略化されたバリアントです (これを拡張したい場合があります) が、理解できるように単純にしておきました。$msg
は一意のコードを出力します。クライアントはこのコードを伝えることができ、それを使用してエラー ログの正確な行を検索できます。どのルールがそれをトリガーしたかなどを確認できます。
外部のもの (mod_perl、mod_php など) を使用したくない場合、たとえば、フロント エンドのリバース プロキシを使用していて、より大きな攻撃対象領域を公開したくない場合は、SSI (サーバー サイド) を使用できます。これは、apache が mod_include を使用して SSI を内部的にサポートしているためです。
mod_include をロードして、これを仮想ホストに追加します。
# Custom 403 HTML error with base64 encoded date + uniqueid on response
<Directory /var/www/html/common/_Errors>
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Options +Includes
</Directory>
ErrorDocument 403 /common/_Errors/403.shtml
<Location "/common/_Errors/403.shtml">
# don't block redirected error page due rule to correlation
SecRuleRemoveById 980130
</Location>
次に、次のような HTML ファイル /var/www/html/common/_Errors/403.shtml を作成します。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>Your request was denied.</p>
<!--#config timefmt="%Y-%m-%d %H:%M:%S" -->
<p><pre><!--#set var="ERR" value="${DATE_LOCAL} - ${UNIQUE_ID}" --></pre></p>
<p><pre><!--#echo encoding="base64" var="ERR" --></pre></p>
</body></html>
必要に応じて、#config timefmt を日付時刻形式に合わせて変更できます。
mod_include の SSI は、DATE_LOCAL と UNIQUE_ID で ERR 変数を展開する HTML 応答を作成し、出力を base64 文字列としてエンコードします。起動されたルールのuniqueidとその日付を取得するだけで十分です。