我们之前已将htmlpurifier集成到我们基于LAMP的产品中,但它有点慢.最近,我们开启了mod_security.这两个都是OWASP项目的一部分(owasp在内部使用htmlpurifer,我检查过),所以我认为安全性是多余的.
你会建议什么?关闭htmpurifier是一个可行的选择吗?谢谢你的回答.
如果我想删除文本中的所有 HTML 代码,但仍然保留可理解的文本,我应该使用哪种方法?
我应该使用 HTML Purifier 还是以$Configuracion->set('HTML.Allowed', '');其他方式使用?
我在使用HTMLPurifier php库时遇到问题.我正在为我的应用程序中的所有文本区域使用名为"Summernote"的WYSIWYG编辑器.
在sommernote里面写一些东西时:
<script>alert('test');</script>
帖子数据来自
<p><script>alert('test');</script></p>
但是,一旦通过HTMLPurifier运行,它就不会删除转换为常规字符的脚本标记.因此,当我在summernote中编辑此文本时,它实际上运行脚本!
这是处理编辑器的内容的图像:

以下是它如何存储在数据库中:

如果有人有任何想法,请告诉我!
编辑:另外,如果我禁用Summernote WYSIWYG编辑器,则在使用HTMLPurifier进行清理时,会从textarea中成功删除标记.
我在 Symfony2 应用程序中使用 TinyMCE 和 HTMLPurifier。
我需要使用 TinyMCE 嵌入网站的一些内部视频。问题是 HTML Purifier不接受 HTML5 视频标签并将其删除。
有人让我知道如何配置 TinyMCE/HTMLPurifier 以允许视频嵌入?
我正在使用HTMLPurifier for Laravel 5包来清理我的输入字段。目前我的store()方法是这样的:
public function store(Request $request)
{
// Some business logic goes here
$post = Post::create($request->all());
// More business logic
}
Run Code Online (Sandbox Code Playgroud)
我的$request变量包含这些:
{
"_token": "zbyUnJuAbSliem40B6xjWJfGOayoFlRSVIvrDlDM",
"title": "Test Title",
"slug": "test-title",
"category_id": "1",
"tags": [
"2"
],
"body": "<p>Test body.</p>"
}
Run Code Online (Sandbox Code Playgroud)
如何仅在变量Purifier::clean()上使用方法$request来净化$request->body元素?
如果我使用Purifier::clean($request->all()),那么它将<p>标记添加到对象的所有元素,$request而不是仅添加body这样的元素:
{
"_token": "<p>zbyUnJuAbSliem40B6xjWJfGOayoFlRSVIvrDlDM</p>",
"title": "<p>Test Title</p>",
"slug": "<p>test-title</p>",
"category_id": "<p>1</p>",
"tags": [
"<p>2</p>"
],
"body": "<p>Test …Run Code Online (Sandbox Code Playgroud) 我正在使用markdown和HTMLpurifier,我希望<?= $variable ?>在markdown代码中使用简写PHP()的示例(使用缩进语法),但HTMLpurifier不会将标记识别<为允许元素并且正在转义它.
知道我需要在HTMLpurifier中启用什么配置选项来阻止它逃避这个吗?
我想从数据库中读取文本条目,其中一些实际上是HTML条目,另一些只是可能包含HTML标记的纯文本,应该显示为文本.
那些纯文本应该转换为HTML,首先调用PHP的htmlspecialchars()函数,然后通过HTMLPurifier运行结果.
或者换句话说,我正在寻找有关如何实现isHTML()函数的一些技巧:
$text = getTextFromDatabase();
if (!isHTML($text)) {
$text = htmlspecialchars($text);
}
$purifier = new HTMLPurifier();
$clean_html = $purifier->purify($text);
Run Code Online (Sandbox Code Playgroud)
因此,例如以下文本将贯穿htmlspecialchars:
The <p> tag of HTML has to be followed by a </p> tag to end the paragraph.
Run Code Online (Sandbox Code Playgroud)
以下文字将不会贯穿htmlspecialchars:
<p>These are few lines of HTML.</p>
<div>There might be multiple independent</div>
<p>but valid HTML blocks in it.</p>
Run Code Online (Sandbox Code Playgroud)
似乎应该已经有了一个isHTML()功能,但我不能碰巧找到它,我不想重新发明轮子:-).也许甚至可以使用某种HTMLPurifier设置来做到这一点?
请注意,如果HTML代码有问题,则应由HTMLPurifier处理,并且不应运行代码htmlspecialchars.:-)例如,<p>当</p>HTML代码中确实应该有一个结束标记时,有一个开始标记.
任何帮助表示赞赏,谢谢:-),
Robert.
似乎即使在添加Config params以启用YouTube和Vimeo Iframe之后,我仍然会收到异常错误."不支持元素'iframe'[..]"
return array(
'encoding' => 'UTF-8',
'finalize' => true,
'preload' => false,
'settings' => array(
'default' => array(
'HTML.Doctype' => 'XHTML 1.0 Strict',
'HTML.Allowed' => 'blockquote,div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]',
'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align',
"HTML.SafeIframe" => 'true',
"URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|api.soundcloud.com/tracks/)%",
'AutoFormat.AutoParagraph' => true,
'AutoFormat.RemoveEmpty' => true,
),
),
Run Code Online (Sandbox Code Playgroud) htmlpurifier ×8
php ×6
laravel ×2
html ×1
html5-video ×1
laravel-4 ×1
laravel-5 ×1
markdown ×1
mod-security ×1
owasp ×1
sanitization ×1
security ×1
symfony ×1
text ×1
tinymce ×1