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

У меня проблемы с развертыванием приложения CakePHP на защищенном сервере.Администратор установил mod_security2, и он выдает ошибку при попытке проверить мои данные POST из форм.

Я точно не прибил, если это проблема, но я думаю, что mod_security сильно не нравится скобки, которыеиспользуются в именах полей, которые генерирует хелпер формы.Имена полей всегда имеют форму:

data [tablename] [fieldname]

и когда я отправляю формы, использующие эти имена, журналы 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 Ответ

2 голосов
/ 28 июня 2011

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

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

$this->Form->input('Model.field', array('name' => 'yourSafeName'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...