我在安全服务器上部署 CakePHP 应用程序时遇到了一些问题。管理员安装了 mod_security2,它在尝试验证表单中的 POST 数据时抛出错误。
如果这是问题,我还没有完全确定,但我认为 mod_security 非常不喜欢表单助手生成的字段名称中使用的括号。字段名称始终采用以下形式:
数据[表名][字段名]
当我提交使用这些名称的表单时,apache 日志会告诉我以下信息(为理智添加了换行符):
[Mon Jun 27 11:14:48 2011] [error] [client 10.255.144.105]
ModSecurity: Warning. Operator LT matched 20 at TX:inbound_anomaly_score.
[file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_60_correlation.conf"]
[line "31"] [msg "Inbound Anomaly Score (Total Inbound Score: 8, SQLi=, XSS=):
900030-Detects common XSS concatenation patterns 1/2"] [hostname "falcon.tamucc.edu"]
[uri "/~jgarcia4/index.php"] [unique_id "TgiseEBHUhAAAGHUhl0AAAAb"]
我推测我正在触发 XSS 注入规则,我的猜测是,它不喜欢字段名称中的“][”。提交空表单以及提交完整填写的表单时会发生这种情况。我已经确认在这种情况下甚至没有调用 PHP。
我无法关闭 mod_security,因为它不是我控制的服务器,所以我一直在处理它。看起来合乎逻辑的“修复”是不在字段名称中使用 [] 括号,但我不知道如何告诉表单处理程序这样做。使用默认命名约定,所有教程看起来都很好。
有没有办法全局更改表单处理程序处理输入元素的字段名称的方式?除此之外,有没有办法为每个单独的元素覆盖它?我不完全确定 cake 的核心引擎如何处理结果——如果模型将其解释为特定格式,那么我可能会被卡住。