我在发布或保存该页面之前创建了一个页面预览。我目前遇到的是忘记将<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(及更低版本)标记都不在列表中。
答案 0 :(得分:3)
在这种情况下,与白名单相比,黑名单会更容易,否则您将不得不不断重新访问此脚本并进行更新。
此外,strip_tags()
对于保证HTML安全是不可靠的,它仍然可以在属性中注入javascript,例如onmouseover="alert('hax');
,它会过去strip_tags()
就好了。
我的HTML过滤/卫生用户库是HTML Purifier。
答案 1 :(得分:3)
请不要使用strip_tags,它不安全且不可靠 - 请阅读以下有关strip_tags的讨论,了解您应该使用的内容: