【发布时间】:2017-09-12 20:12:33
【问题描述】:
当客户访问我的个人服务器上托管的 PHP 站点时,他在 URL 中包含一个变量(例如 https://www.example.com/test.php?t=somevalue),modsecurity 会在 error.log 文件中显示一条错误消息。
规格:
Server OS: Linux server 3.2.0-4-486 #1 Debian 3.2.57-3 i686
Apache: version 2.2.22
PHP: version 5.4.4-14+deb7u9
Modsecurity: version 2.8.0
错误信息:
ModSecurity: Warning. Match of "eq 1" against "&ARGS:CSRF_TOKEN" required. [file "/usr/share/modsecurity-crs/optional_rules/modsecurity_crs_43_csrf_protection.conf"] [line "31"] [id "981143"] [msg "CSRF Attack Detected - Missing CSRF Token."]
This SO 问题与我的类似,除了我只在客户端的浏览器添加变量时收到错误。
Modsecurity 使用OWASP base_rules 和optional_rules 进行配置。我不为这些使用符号链接。
我的服务器配置唯一不寻常的是它使用自签名 SSL 证书,但我认为这与问题无关。
无论 PHP 文件包含什么内容都会显示该错误,而 HTML 文件不会出现此错误。
是什么导致了这个错误,我该如何消除它?
如果是缺少 CSRF 令牌,我该如何添加?
【问题讨论】:
-
你在 /etc/modsecurity/rules/ 下有什么?
-
OWASP
base_rules和optional_rules。我将其添加到我的问题中...... -
modsecurity_crs_43_csrf_protection.conf的内容是什么
-
AW,我建议不要使用 csrf 保护规则并实施你自己的。因为它对ajax有限制。限制 - 此实现目前不适用于 AJAX
-
您不需要非常有经验就可以从错误信息中读取行号:
[line "31"]- 文件也被命名。使用该行和其中的给定规则,请查阅 mod_security 的文档,以及有关它的 OWASP 项目/文档(如果有)。我猜有人想出了一些东西来在其中插入规则,您可能会通过了解它而受益最大。
标签: php apache csrf mod-security