@Alk90
php, mysql, jquery, css, html, api

Как не доверять данным в БД?

Всем привет!
Правило защиты от xss гласит, что нельзя доверять данным даже тем, которые обработаны и сохранены в БД...
Но как выполнять функцию htmlspecialchars(), если данные уже содержат теги <b>, <br>, <p>, <i>?
Ведь они тоже преобразуются в HTML сущности....
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Правило защиты от xss гласит, что нельзя доверять данным даже тем, которые обработаны и сохранены в БД...

а выполнять функцию htmlspecialchars() и "нельзя доверять данным" Для Вас одно и тоже?

Ведь они тоже преобразуются в HTML сущности

В этом смысл htmlspecialchars(), что бы убрать из sql символы, которые могут на него повлиять, а не должны (в частности)
Ответ написан
@Inclusive
htmlspecialchars - Преобразует специальные символы в HTML-сущности. Если вам нужно выводить текст с html тегами, который будет виден в dom - такой подход вам не подойдет. В этом случаем вам нужно чистить входящие данные от неугодного: тегов "", событий на элементах и.т.д. Но давать обычному пользователю возможность вставлять любые теги - плохая идея. Реализуйте bb коды или что-то подобное, если же это какая-нибудь админка и нужна возможность вставлять тего, то тут уже защита не нужна - человек только сам может отстрелить себе ногу. Посмотрите любую cms - в админке вы можете вставить любой js, html и он будет выведен - безопасность ложится на самого пользователя админки.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Но как выполнять функцию htmlspecialchars(), если данные уже содержат теги
Почему у Вас данные в БД содержат теги?!

Чтобы пофиксить возможный xss:
1. Не допускайте наличие скриптов в сохранённом коде HTML-разметки и никаких свойств тегов, кроме "class".
2. Проверяйте корректность XML-структуры каждой HTML-разметки, полученной из базы, перед использованием.
3. Настройте заголовок X-XSS-Protection
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы