3

我正在寻找一种方法使规则的消息信息(已触发哪个规则)出现在错误和/或审核日志文件中,并在响应标头中发送回客户端。我知道有阶段“msg”,但它不会在响应标头中将信息发送回客户端,所以它对我没有帮助。我想在html中查看错误页面中的日志信息,怎么办?谢谢你的帮助,弗拉迪。

4

2 回答 2

4

让客户知道到底出了什么问题是个坏主意。黑客可以使用它来绕过您的安全框架。一个更好的方法是组合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打印一个唯一的代码。客户端可以告诉您此代码,您可以使用它在错误日志中查找确切的行,您将在其中看到哪个规则触发了它等。

于 2013-10-16T22:43:37.997 回答
0

如果您不想使用外部东西(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 将创建一个 HTML 响应,使用 DATE_LOCAL 和 UNIQUE_ID 扩展 ERR 变量,并将输出编码为 base64 字符串。足以让我获得被触发的规则及其日期的唯一 ID。

于 2021-07-31T23:18:18.357 回答