Формы вставляют javascript в БД

#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()?