PHP“strip_tags”接受除脚本以外的所有内容

时间:2013-02-27 11:06:15

标签: php html5 tags strip-tags

我在发布或保存该页面之前创建了一个页面预览。我目前遇到的是忘记将<h1> <h2> <h3> etc标记添加到允许列表中,但我稍后添加了它们。

我想允许除<script>标记之外的所有HTML标记,到目前为止我想出了这个列表:

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规范中的AVAILABLE标记,HTML5中不推荐使用的所有HTML4(及更低版本)标记都不在列表中。

2 个答案:

答案 0 :(得分:3)

在这种情况下,与白名单相比,黑名单会更容易,否则您将不得不不断重新访问此脚本并进行更新。

此外,strip_tags()对于保证HTML安全是不可靠的,它仍然可以在属性中注入javascript,例如onmouseover="alert('hax');,它会过去strip_tags()就好了。

我的HTML过滤/卫生用户库是HTML Purifier

答案 1 :(得分:3)

请不要使用strip_tags,它不安全且不可靠 - 请阅读以下有关strip_tags的讨论,了解您应该使用的内容:

Strip_tags discussion on reddit.com