2013-02-27 4 views
2

Я создаю страницу-просмотр перед публикацией или сохранением этой страницы. В чем я столкнулся, я забыл добавить теги <h1> <h2> <h3> etc в допустимый список, но я добавил их позже.PHP "strip_tags" принимает все, кроме скрипта

Я хочу, чтобы ВСЕ HTML теги кроме <script> тега, и до сих пор я придумал этот список:

public static function tags() { 
    return '<p><a><hr><br><table><thead><tbody><tr><td><th><tfoot><span><div><ul><ol><li><img>' . 
     '<canvas><video><object><embed><audio><frame><iframe><label><option><select><option>' . 
     '<input><textarea><button><form><param><pre><code><small><em><b><u><i><strong><article>' . 
     '<aside><bdi><details><summary><figure><figcaption><footer><header><hgroup><mark><meter>' . 
     '<nav><progress><ruby><rt><rp><section><time><wbr><track><source><datalist><output><keygen>' . 
     '<h1><h2><h3><h4><h5><h6><h7><h8><h9>'; 
} 

Так я использую этот статический метод, как это:

$model->content = strip_tags($_POST['contents'], HTML5Custom::tags()); 

Я пропустил какие-либо теги там?

Я был в основном сосредоточен на доступных тегах в спецификации HTML5, а все теги HTML4 (и ниже), которые устарели в HTML5, в списке не указаны.

ответ

3

Пожалуйста, не используют strip_tags, это небезопасно, и ненадежно - прочитайте следующую дискуссию о strip_tags за то, что вы должны использовать:

Strip_tags discussion on reddit.com

3

В этом случае это будет проще для черного списка, а не для белого списка, иначе вам придется постоянно пересматривать этот скрипт и обновлять его.

Кроме того, strip_tags() ненадежен для создания HTML безопасной, она по-прежнему можно вводить JavaScript в атрибуты, например onmouseover="alert('hax'); и он будет пройти strip_tags() просто отлично.

Моя библиотека для фильтрации и очистки HTML составляет HTML Purifier.

+0

благодаря Britsman, я проверю на нем прямо сейчас. –