Можете ли вы сказать помощнику формы CakePHP использовать другую схему именования?

У меня возникли некоторые проблемы при развертывании приложения 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 обрабатывает результаты - если Модель ожидает, что он будет в определенном формате, то я могу застрять.

1 ответ

Я не совсем уверен, как это сделать. Следующий код может ужасно завершиться сбоем или заставить FormHelper вообще не работать. Затем вам придется манипулировать данными формы, чтобы получить правильную структуру массива, если вы хотите использовать проверку модели Cake.

Вы можете попробовать:

$this->Form->input('Model.field', array('name' => 'yourSafeName'));
Другие вопросы по тегам