0

我在共享主机上使用 apache fcgi 运行 django。我已将其设置为报告 404 错误并通过电子邮件继续查看Not Found: /406.shtml(我猜s是因为它只是 https)。但是我已经在以下位置设置了错误文档.htaccess

ErrorDocument 406 /error/406.html

ErrorDocument在为每个错误设置一个之前,我从 django 收到了一堆类似的 404 错误,但它仍然发生在 406 上。grep 406通过 apache 错误日志,我看到偶尔出现 406(不是 404)错误406.shtml,例如以下,但不如 django 给我发电子邮件的频率:

[Fri ...] [error] [client ...]
    ModSecurity: Access denied with code 406 (phase 1).
    Pattern match "Mozilla ... AhrefsBot ...)" at REQUEST_HEADERS:User-Agent.
    [file "/usr/local/apache/conf/mod_sec/mod_sec.hg.conf"] [line "126"]
    [id "900165"] 
    [msg "AhrefsBot BOT Request"]
    [hostname "www.myhostname.com"]
    [uri "/406.shtml"]
    [unique_id "..."]

我什至不确定这是否是 apache 内部重定向406.shtml并将其转发到 django 或者是否某些机器人试图406.shtml直接查找。前者似乎表明ErrorDocument. 后者并不是我真正的问题,但是要么我应该406.shtml在 apache 日志中看到 404,要么什么都没有,因为 django 将处理 404?我怎样才能进一步追踪它?

我无法仅通过访问我的网站来重现该问题,但我想知道发生了什么。

4

1 回答 1

4

您在 Apache 中安装了 ModSecurity,这是一个 WAF,它试图保护您的网站免受攻击、机器人等。不幸的是,这些,比如垃圾邮件,现在是运营网站的重要组成部分。

ModSecurity 是 Apache 的一个附加模块,它允许您定义规则,然后它根据这些规则运行每个请求并决定是否阻止请求。

在这种情况下,规则(900165,在文件“/usr/local/apache/conf/mod_sec/mod_sec.hg.con”中定义)已决定根据用户代理(AhrefsBot)以 406 状态阻止此请求。

Ahref 是一个网站,它通过爬网尝试建立链接数据库。搜索引擎优化人员使用它来查看谁链接到您的网站(反向链接对搜索引擎优化非常重要),因为谷歌(您认为会更好地提供此类信息)只提供链接样本而不是完整列表。

AhrefBot 有危险吗?应该阻止它吗?好吧,这是一个见仁见智的问题。假设它真的是 AhrefBot(一些邪恶的机器人可能会假装它是合法的,所以检查 IP 地址以查看它来自的主机名),那么它可能会浪费你的资源而没有给你带来太多好处。另一方面,这是开放网络的价格。您的网站可供公众使用,也可供那些编写机器人和工具(好或坏)的人使用。

为什么会返回 406?那么这就是您的 ModSecurity 和/或您的规则的定义方式。检查您的 Apache 配置。406 有点不寻常,因为通常会出现 403(拒绝访问)或 500(内部服务器错误)。

什么是 406.shtml 文件?我不明白。.shtml 是一个 HTML 文件,它还允许服务器端包含将其他文件和代码嵌入到 HTML 文件中。老实说,它们不再被使用,因为 PHP 和/或其他语言更常见。这可能是一种攻击:即有人试图上传 406.shtml 文件,然后导致它被调用,因此它“执行”并包含文件的内容,可能会访问 Apache 可以看到的文件,这些文件在网络服务器,或用户已请求(出于某种原因)或 Apache 配置为显示 406 错误或 ModSecurity 规则正在重定向到该文件。

希望这提供了一个很好的背景,我可以建议的最好的事情是通过您的 Apache 配置文件,以及它加载的任何其他配置文件(包括它必须加载的 mod_sec.hg.con 文件)以完全了解您的设置和。决定你是否需要在这里做任何事情。

你可以做几件事之一:

  1. 保持原样。ModSecurity 正在做它被告知要做的事情并用 406 阻止它
  2. 关闭此规则并允许 AhrefRef 通过,这样您就不会收到警报。
  3. 更改 ModSecurity 配置/规则以返回 406 以外的错误,以便您可以忽略它
  4. 完全关闭 ModSecurity。我认为这是一个很好的工具并且值得,但确实需要一些时间和精力才能充分利用它。
  5. 正确设置 406 错误页面。要做到这一点,您需要了解为什么它现在试图返回 406.shtml。

由于您在共享主机上并且可能没有完全访问权限,因此也不确定您可以使用哪些选项。如果是这样,请咨询您的托管服务提供商以获取建议。

于 2016-02-02T08:31:23.007 回答