【发布时间】:2019-01-29 01:24:31
【问题描述】:
我正在配置我的 Django 应用程序以通过电子邮件向我发送错误(异常)。
通常没问题 - 但我的电子邮件托管在 Office 365 上,而且似乎 Microsoft 会自动扫描和加载电子邮件中的 URL。
结果是它访问了我的 Django 应用程序中的 URL,并导致另一个错误……和另一封电子邮件。最终结果:一个迷人的小邮件循环,它在几秒钟内向我发送了 50 多条消息。
我在我的 apache 日志中发现了这样的条目:
157.55.39.163 - - [22/Aug/2018:17:30:05 +0000] "GET /testerror HTTP/1.1" 500 5808 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
我想阻止对用户代理的访问(包含“BingPreview”),所以我可以防止这个循环。
我把它放到我的虚拟主机中:
SetEnvIf User-Agent "^.*BingPreview.*$" bad_user
<Directory /path/top/my/app/>
<Files wsgi.py>
Require not env bad_user
</Files>
</Directory>
但是当我重新加载 apache 时,我收到错误 negative Require directive has no effect in <RequireAny> directive。
【问题讨论】:
-
我会像这样使用
mod_rewrite:stackoverflow.com/a/4628075/7362396 - 然后 RewriteCond 使用典型的RewriteRule . - [R=403,L]来阻止它。 -
您可能会发现这很有帮助 - serverfault.com/questions/499327/…。我认为您需要使用
<Location>指令而不是<Directory>。 -
感谢@TobiasK,我采用了您的想法并在下面发布了解决方案。
-
谨慎使用
<Location>,因为它会覆盖<Directory>中的任何其他授权限制,除非您添加AuthMerging And。请参阅 apache 文档中有关Require的安全警告:httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require