#php #codeigniter-3 #xss
#php #codeigniter-3 #xss
Вопрос:
Привет и спасибо за чтение.
Я работаю над CodeIgniter 3 с PHP 7.0 и использую формы с form_helper.
Сначала у меня возникли проблемы с повторным заполнением формы функцией set_value после использования библиотеки form_validation в моем контроллере. Я использовал set_value в моем form_helper следующим образом :
$my_input = array(
'name' => 'my_name',
'value' => set_value('my_name')
);
echo form_label('Title :');
echo form_textarea($my_input);
Итак, с некоторым текстом, подобным этому :
she's the chief's lady
Форма была повторно заполнена следующим образом :
sheamp;#039;s the chiefamp;#039;s lady
Это не большая проблема, потому что, когда я регистрирую эти данные и заполняю поле, в HTML это выдаст правильное предложение.
НО если в форме есть другая ошибка, то предложение будет зарегистрировано следующим образом :
sheamp;amp;#039;s the chiefamp;amp;#039;s lady
и теперь мои данные больше не соответствуют действительности.
Итак, я прочитал документ CodeIgniter и нашел это :
Третий (необязательный) параметр позволяет отключить экранирование значения в формате HTML, на случай, если вам нужно использовать эту функцию в сочетании, например, с form_input() и избежать двойного экранирования.
Отлично, я решил свою проблему с экранированием. Но как насчет внедрения xss? Эта практика кажется очень опасной, я не понимаю, почему это лучший способ, если я доверяю ДОКУМЕНТУ CodeIgniter (я провел быстрый тест с помощью скрипта оповещения и сбоя системы безопасности). Итак :
1) Каков наилучший способ обезопасить себя и избежать экранирования, когда мне приходится повторно заполнять форму???
2) Единственный человек, видящий злой ввод, — это тот, кто его написал, но все еще ли это опасно для моего веб-приложения или нет???
3) И если нет опасности при повторном заполнении формы отправленными данными, зачем нам нужно устанавливать для параметра escape значение FALSE в set_value() ? Почему значение по умолчанию не равно FALSE ?
РЕДАКТИРОВАТЬ: я добавил 2 последних вопроса
Ответ №1:
CodeIgniter надежно предотвратит внедрение SQL, когда что-либо попадет в его модели. Поскольку вы просто отображаете результат в браузере, нет риска внедрения, поскольку все, что вы делаете, это отображаете то, что они написали им в ответ.
Но у вас есть хорошая мысль о JavaScript или другом теге. Предполагая, что единственный человек, который может получить доступ к полю ввода, является автором его содержимого, и что вы экранируете его результаты при просмотре другими людьми, тогда единственный человек, для которого они могут создать окно предупреждения (или хуже), — это они сами, что, конечно, они могут сделать в любом случае в консоли.
Если вы все еще беспокоитесь, вы всегда можете использовать strip_tags() PHP для этого поля.
Комментарии:
1. Итак, если я правильно понял, это не опасно для приложения и конечных пользователей, потому что это затрагивает только автора плохого контента !? Это все, что я хочу знать, спасибо за ответ 😉 PS: интересная функция strip_tags(), но не на 100% безопасная, поэтому я предпочитаю что-то вроде HTML Purifier.
2. Я подумал о том, что вы сказали, и у меня есть другой вопрос: если нет опасности при повторном заполнении формы отправленными данными, зачем нам устанавливать для параметра escape значение FALSE в set_value() ? Почему значение по умолчанию не равно FALSE ? И, чтобы быть уверенным, не могли бы вы подтвердить этот факт, пожалуйста? Единственный человек, видящий злой ввод, — это тот, кто его написал, но все еще ли это опасно для моего веб-приложения или нет??? Спасибо @Thomas Edwards