记录 htaccess 拒绝的网址
Log htaccess-rejected urls
.htaccess 具有一组规则来拒绝一些格式错误的 url,例如:
RewriteCond %{QUERY_STRING} (select|\/\*\*\/) [NC]
RewriteRule ^ - [F,L]
如何获取所有被拒绝网址的日志?
或者我怎样才能最好地有效或临时记录这些被拒绝的网址?
[使用更多上下文进行编辑 :] 我的网站有时会因为过度的黑客机器人试图找到进入它的方法而崩溃。为了避免这种情况,我在 .htaccess 中设置了一些规则,拒绝在 hackerbots url 中发现的最常见模式。这工作正常,或者至少看起来工作正常。我现在希望(每隔一段时间)检查是否
- 有些规则没用,我可以删除它们
- 有些规则过于宽泛,会拒绝合法请求
为此,我可以构建一个脚本,将完全相同的规则(取自 htaccess)应用到包含所有请求的 apache access.logs。但是每次我更新 htaccess 时都需要同步脚本。因此,我想知道是否有设置或“好”的方式来记录所有且唯一的 htaccess 拒绝的 url。
我现在开始理解你上面的附加评论了。您所问的内容实际上与您在问题中所写的内容并不清楚。你写了“所有被拒绝的 url 的日志”,我理解请求的和被拒绝的 url,因为这是 http 服务器处理的。但是现在我明白了,您实际上对 URL 根本不感兴趣,而是对匹配该条件的所有可能查询字符串的列表感兴趣。所以我们这里说的是理论信息学,人工语言,复杂性理论的一部分。
你问的是不可能的。原因是您要求的列表显然是无限大的。因此,您所能做的就是设置一种算法,根据特定规则集一个接一个地创建匹配字符串。但我敢说这并没有什么帮助,实际的规则集对你来说可能更有趣....
我会这样表述:您的正则表达式将匹配包含两个子字符串“select”或“/**/”中任何一个的字符串,所以在开头,在中间或者在最后,不管它之前和之后是什么。看看这个:https://regex101.com/r/tHkqZE/1 那里的“foo”和“bar”可以是任何东西 ...
也许你想限制那个集合。考虑到查询字符串的典型构造,第一步(可能是第一步)是将表达式锚定在整个字符串的开头或结尾或“&”字符处。
正如@arkascha 提到的,apache 对每个请求的处理状态在 apache 的 access.log 中说明
所以最好是从那里得到它。
.htaccess 具有一组规则来拒绝一些格式错误的 url,例如:
RewriteCond %{QUERY_STRING} (select|\/\*\*\/) [NC]
RewriteRule ^ - [F,L]
如何获取所有被拒绝网址的日志?
或者我怎样才能最好地有效或临时记录这些被拒绝的网址?
[使用更多上下文进行编辑 :] 我的网站有时会因为过度的黑客机器人试图找到进入它的方法而崩溃。为了避免这种情况,我在 .htaccess 中设置了一些规则,拒绝在 hackerbots url 中发现的最常见模式。这工作正常,或者至少看起来工作正常。我现在希望(每隔一段时间)检查是否
- 有些规则没用,我可以删除它们
- 有些规则过于宽泛,会拒绝合法请求
为此,我可以构建一个脚本,将完全相同的规则(取自 htaccess)应用到包含所有请求的 apache access.logs。但是每次我更新 htaccess 时都需要同步脚本。因此,我想知道是否有设置或“好”的方式来记录所有且唯一的 htaccess 拒绝的 url。
我现在开始理解你上面的附加评论了。您所问的内容实际上与您在问题中所写的内容并不清楚。你写了“所有被拒绝的 url 的日志”,我理解请求的和被拒绝的 url,因为这是 http 服务器处理的。但是现在我明白了,您实际上对 URL 根本不感兴趣,而是对匹配该条件的所有可能查询字符串的列表感兴趣。所以我们这里说的是理论信息学,人工语言,复杂性理论的一部分。
你问的是不可能的。原因是您要求的列表显然是无限大的。因此,您所能做的就是设置一种算法,根据特定规则集一个接一个地创建匹配字符串。但我敢说这并没有什么帮助,实际的规则集对你来说可能更有趣....
我会这样表述:您的正则表达式将匹配包含两个子字符串“select”或“/**/”中任何一个的字符串,所以在开头,在中间或者在最后,不管它之前和之后是什么。看看这个:https://regex101.com/r/tHkqZE/1 那里的“foo”和“bar”可以是任何东西 ...
也许你想限制那个集合。考虑到查询字符串的典型构造,第一步(可能是第一步)是将表达式锚定在整个字符串的开头或结尾或“&”字符处。
正如@arkascha 提到的,apache 对每个请求的处理状态在 apache 的 access.log 中说明 所以最好是从那里得到它。