Очистка HTML String Сохранение некоторых тегов и атрибутов

StackOverflow https://stackoverflow.com/questions/3644171

  •  30-09-2019
  •  | 
  •  

Вопрос

После внедрения моих дезинфекции функций (согласно запрошенной спецификации), мой босс решил изменить принятый вклад. Теперь он хочет сохранить определенный тег и его атрибуты. Я предложил реализовать язык BBCode, который является более безопасным ИМХО, но он не хочет, потому что это будет много работы.

На этот раз я хотел бы сохранить его просто, поэтому я не буду убивать его в следующий раз, когда он просит меня снова изменить эту вещь. И я знаю, что он будет.

Достаточно ли использовать сначала strip_tags с параметром тега, чтобы сохранить, а затем htmlentities?

Это было полезно?

Решение

strip_tags не обязательно приводит к безопасному контенту. strip_tags с последующим htmlentities Было бы безопасно, в том, что все HTML-кодировка безопасна, но оно не имеет никакого смысла.

Либо пользователь вводил простой текст, в этом случае он должен быть выведен с использованием htmlspecialchars (в предпочтении htmlentities), Или они вводят разметку HTML, в этом случае вам необходимо правильно проанализировать его, исправлять разбиение и удаление элементов / атрибутов, которые не являются безопасным белым.

Если это то, что вы хотите, используйте существующую библиотеку, чтобы сделать это (например, htmlpurifier.). Потому что это не тривиальная задача, и если вы ошиблись, вы дали себе SCS Security Holes.

Другие советы

Вы можете сохранить определенные теги, используя strip_tags С этим синтаксисом: strip_tags($text, '<p><a>');

Этот фрагмент будет набрать все теги, кроме p а также a. Отказ Атрибуты хранятся для тегов, которые вам разрешены (p а также a В приведенном выше примере).

Однако это не значит, что атрибуты безопасны. Хочет ли он конкретные атрибуты или он хочет сохранить все они на разрешенных тегах? Для первого случая вам нужно будет анализировать каждый тег и удалить желаемые, санитазировать значения. Чтобы сохранить все атрибуты на разрешенных тегах, вам все равно нужно продемонстрировать их. Я бы порекомендовал запустить htmlentities На значения атрибута для их дезинфекции (для отображения я бы предположил).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top