#javascript #php #forms #validation #symfony
#javascript #php #формы #проверка #symfony
Вопрос:
Мое действие заключается в записи содержимого формы, включая код JavaScript, в БД. Как я могу избавиться от JavaScript, если пользователь вставляет JavaScript в мой from или не делает его выполнимым. Потому что, если я собираюсь получить его из db и выполнить echo, JavaScript выполняется. Это, конечно, (в зависимости от действия) основная проблема безопасности.
Например: вставьте в мою форму «имя» или «текстовое поле»: <s c r i p t> aler..</ s c r i p t >
Моя форма выглядит так:
->add('name', 'text', array(
'constraints' => array(new Length(array('max' => 255, 'maxMessage' => $this->get('translator')->trans('maxlength255.name', array(), 'forms')))),
'required' => false,
'attr' => array('oninvalid' => "setCustomValidity('" . $this->get('translator')->trans('oninvalid.name', array(), 'forms') . "')",
'onchange' => "try{setCustomValidity('')}catch(e){}",
'placeholder' => $this->get('translator')->trans('placeholder.name', array(), 'forms'),)
))
->add('message', 'textarea', array(
'constraints' => array(new Length(array('min' => 5, 'max' => 5000, 'maxMessage' => $this->get('translator')->trans('maxlength5000.message', array(), 'forms'), 'minMessage' => $this->get('translator')->trans('minlength5.message', array(), 'forms')))),
'required' => false,
'attr' => array('oninvalid' => "setCustomValidity('" . $this->get('translator')->trans('oninvalid.message', array(), 'forms') . "')",
'onchange' => "try{setCustomValidity('')}catch(e){}",
'placeholder' => $this->get('translator')->trans('placeholder.message', array(), 'forms'),)
))
Прошу прощения, если вопрос уже задан, но я не смог найти его в stackoverflow. Тогда, пожалуйста, укажите ссылку на это! Спасибо!
Ответ №1:
ЭТО плохая практика вместо того, чтобы помещать код js в базу данных, помещать переменную информацию как
сериализованные данные позже создают их с помощью циклов…
однако, если вы хотите сначала поместить это, преобразуйте это в htmlentities, используя
htmlentities(); функция
при извлечении используйте html_entity_decode(); функция
для декодирования и получения исходного исходного кода…
Комментарии:
1. Хорошо, спасибо. Но вы, возможно, не знаете, есть ли автоматический способ сделать это в symfony2? Значит, мне не нужна функция htmlentities()?