你能告诉CakePHP的表单助手使用不同的命名方案吗?

时间:2011-06-28 17:12:21

标签: forms cakephp mod-security2

我在安全服务器上部署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,因为它不是我控制的服务器,因此我无法处理它。这似乎是一个合乎逻辑的解决方案。不会在字段名称中使用[]括号,但我不知道如何告诉表单处理程序这样做。所有教程看起来都没有默认的命名约定。

有没有办法全局更改表单处理程序处理输入元素的字段名称的方式?除此之外,有没有办法为每个单独的元素覆盖它?我不完全确定蛋糕的核心引擎如何处理结果 - 如果模型将其排除在特定格式之外,那么我可能会陷入困境。

1 个答案:

答案 0 :(得分:2)

我不确定如何做到这一点。以下代码可能会失败或导致FormHelper根本无法工作。如果要使用Cake的模型验证,则必须操作表单数据以获得正确的数组结构。

你可以尝试:

$this->Form->input('Model.field', array('name' => 'yourSafeName'));