PHP не игнорирует HTML-теги - PullRequest
1 голос
/ 08 марта 2019

У меня есть поле ввода, в котором пользователь вводил строку, например

 "/> <img src=xxx onError=alert('test is here')

, но во время использования функции strip_tags перед сохранением значения в базе данных.Он игнорирует тег изображения , но строка "/> сохраняется в базе данных как есть.

Как мне с этим справиться.

1 Ответ

0 голосов
/ 08 марта 2019

Если честно, к сожалению, нет единого пути к решению.

Функция strip_tags хорошо работает с хорошо отформатированным HTML, и ваш пример недопустим.

Один из вариантов - написать собственный код, который «очищает» ввод в зависимости от его характера. Например, если на входе должен быть указан возраст кого-либо, удалите все, что не является цифрой. Вы можете сделать то же самое для имен, телефонов и т. Д. И т. Д.

Конечно, мы, как разработчики, не можем предвидеть все возможные бессмысленности, которые пользователь может ввести (намеренно или нет), и иногда мы получаем такие данные в БД. Вот почему всегда полезно избегать данных перед их печатью в HTML. Все фреймворки и шаблоны уже делают это для вас. Если вы не используете фреймворк, вы можете использовать функцию htmlentities - http://php.net/manual/en/function.htmlentities.php.

htmlentities сделает любые зарезервированные символы HTML сохраненными и не сломает вашу страницу. Например:

htmlentities("/> <img src=xxx onError=alert('test is here')");

приведет к:

/&gt; &lt;img src=xxx onError=alert('test is here')

И после рендеринга через браузер это будет выглядеть так:

enter image description here

...