У меня есть пользовательское текстовое поле для записи, которое я хочу санировать, wp_kses
прежде чем обновлять свою мета-запись.
Я искал примеры общих $allowed
настроек, но я видел только этот пример:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
Что такое типичная wp_kses
$allowed
обстановка? Может ли кто-нибудь привести пример того, что он обычно фильтрует?
Ответы:
Я бы не согласился с решением, опубликованным @JaredCobb,
wp_kses()
гораздо более гибким, чем метод, который он представил. Он может удалять нежелательные атрибуты из тегов, не разрушая сами теги. Например, если пользователь вставил<strong class='foo'>
,wp_kses()
вернется,<strong>
если вы не разрешили класс, тогда какstrip_tags()
удалил бы<strong>
полностью.@redconservatory: вы хотите использовать следующие атрибуты:
Это позволит выделять жирным шрифтом и курсивом без атрибутов, а также привязывать теги с
href
атрибутами ... и больше ничего. Он использует принцип белого списка, который, как справедливо заметил @jaredcobb, является лучшим способом.источник
wp_kses
позволяет больше контроля, чем нативные опции PHP. Я думаю, что сказал это. Я также использовал слово «атрибуты». Я говорил, что это зависит от вашего варианта использования. Кому-то, пытающемуся защитить свои данные от всех тегов, было бы лучше использовать ИМХО strip_tags, но это больше, чем я. Приветствия.Я бы начал с того же
$allowedtags
массива, который WordPress использует для своих комментариев. Вы можете найти их массив в[wordpress directory]/wp-includes/kses.php
файле. Мне кажется, что это разумные значения по умолчанию и хорошая отправная точка. Вот их массив ...Я бы не использовал PHP
strip_tags
в качестве заменыwp_kses
.Вы никогда не должны использовать strip_tags для фильтрации содержимого неизвестного пользователя!
Я создал короткое видео, объясняющее, почему WordPress wp_kses () лучше, чем PHP strip_tags () для безопасности .
источник
Я использовал только
wp_kses
тогда, когда мне нужно было разрешить / отфильтровать атрибуты тегов HTML (например, я хочу, чтобы им было разрешено иметь<image>
тег сsrc=""
атрибутом, но я не хочу, чтобы они могли, ноhref=""
илиstyle=""
или что-то еще в теге image. В этом случае этоwp_kses
пригодится, потому что (как вы можете видеть из созданного вами примера) вы можете фильтровать очень специфично. Я редко использовалwp_kses
хотя бы потому, что просто нашел пару нативных PHP Функции (ниже) делают свое дело и их легче понять, когда я смотрю на код несколько месяцев спустя.Если вы хотите полностью удалить теги HTML (за исключением, может быть, разрешить несколько), я всегда использую
strip_tags
. Вы можете передать строку разрешенных тегов (например<p> <br> <strong>
) или любые другие безопасные теги, которые вам нравятся. Это позволяет пользователю быть в состоянии иметь некоторый контроль над форматированием, если это применимо для вашего использования. Мне нравится,strip_tags
потому что для очистки ваших данных требуется белый список . (Это означает, что все будет удалено, кроме того, что вы явно белый список).Если ваша цель состоит в том, чтобы позволить им вставлять любой HTML-код в контент, но вы просто хотите показать их текст в том виде, в каком они были введены (например, примеры кода), используйте
htmlspecialchars
. Это преобразует символы HTML в их закодированные аналоги, чтобы вы могли безопасно выводить их на страницу.Вы можете встретить код, использующий
str_replace
который «ищет» плохие теги, такие как или что угодно. Я действительно не рекомендую такой подход, потому что он использует черный список для очистки данных, и вы должны постоянно следить за актуальностью своего черного списка.Полагаю, это зависит от того, для чего используются ваши метабоксы. Если вы защищаете от ввода со стороны пользователей (которые могут быть вредоносными), я бы порекомендовал
strip_tags
и просто разрешил некоторые из безопасных тегов. Если у вас есть хороший бизнес дело действительно микроуровень теги и определенные атрибуты контента пользователя,use wp_kses
.источник
wp_kses()
делает все, чтоstrip_tags()
делает и больше? Я за простоту, но я думаю, что есть аргумент, чтобы никого не «удивлять».wp_kses()
это «путь Wordpress», и поскольку мы пишем код Wordpress, есть аргумент, что это, вероятно, лучший выбор. Кроме того, если в какой-то момент в будущем мы захотим внести в белый список определенные комбинации тегов / атрибутов, использованиеwp_kses()
с самого начала не требует рефакторинга.Вот и ты. Это работает как в WordPress, так и вне WordPress.
источник
Вы также можете использовать функцию wp_kses_post, которая используется для содержимого публикации и требует только данные в качестве параметра.
Более подробная информация здесь: http://codex.wordpress.org/Function_Reference/wp_kses_post
источник
@Славослав Маринов
Я добавил этот код сразу после $ buffer = trim ($ buffer);
попытаться очистить HTML и избежать вставки скрытых символов, нарушающих код, но он не работает, он очищает HTML, но скрытые символы все еще остаются.
источник