我正在使用HTML Purifier(http://htmlpurifier.org/)
我只是想删除<script>
标签.我不想删除内联格式或任何其他东西.
我怎样才能做到这一点?
还有一件事,还有其他方法可以从HTML中删除脚本标记
是否有一种简单的方法来为HTMLPurifier添加HTML5规则集?
可以将HP 配置为识别新标签:
// setup configurable HP instance
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'html5 draft');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // no caching
$def = $config->getHTMLDefinition(true);
// add a new tag
$form = $def->addElement(
'article', // name
'Block', // content set
'Flow', // allowed children
'Common', // attribute collection
array( // attributes
)
);
// add a new attribute
$def->addAttribute('a', 'contextmenu', "ID");
Run Code Online (Sandbox Code Playgroud)
然而,这显然有点工作.由于必须注册许多新的HTML5标签和属性.即使使用现有的HTML 4标记,新的全局属性也应该是可组合的.(从文档中判断如何增加核心规则很难判断).那么,是否有更有用的配置格式/数组结构将新的和更新的标记+属性+上下文配置(内联/块/空/流/ ...)提供给HTMLPurifier?
# mostly confused about how to extend existing tags:
$def->addAttribute('input', 'type', "...|...|...");
# or …
Run Code Online (Sandbox Code Playgroud) 我正在研究PHP安全最佳实践,特别是HTML Purifier库.
我喜欢使用第三方库来帮助加强我网站的安全性,但我对一些事情感到困惑......
首先,一个普遍的问题...... HTML Purifier的做法是什么,实践安全的PHP编程不能?
如果我正在使用HTML Purifier,这是否意味着我可以跳过常见的安全措施,例如使用PHP函数来过滤输入和转义输出?
这个问题的回复评论之一似乎表明只有允许HTML标签的元素(例如WYSIWYG编辑器)才需要HTML Purifier.它是否正确?
有没有人注意到使用HTML Purifier的性能滞后?本文使性能影响值得考虑.
只是为了确认我已经完成了我的作业才问这个......
如何在HtmlPurifier中允许自定义(html5 data-*)属性?
输入:
<img src="/my.jpg" data-type="5" alt="" />
Run Code Online (Sandbox Code Playgroud)
导致错误:
Attribute 'data-type' in element 'img' not supported
(for information on implementing this, see the support forums)
Run Code Online (Sandbox Code Playgroud)
HtmlPurifier选项设置为:
'HTML.AllowedAttributes' => array('img.src', 'a.href', 'img.data-type')
Run Code Online (Sandbox Code Playgroud) 如何使用HTMLPurifier过滤xss,还允许使用iframe Vimeo和Youtube视频?
require_once 'htmlpurifier/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Trusted', true);
$config->set('Filter.YouTube', true);
$config->set('HTML.DefinitionID', '1');
$config->set('HTML.SafeObject', 'true');
$config->set('Output.FlashCompat', 'true');
$config->set('HTML.FlashAllowFullScreen', 'true');
$purifier = new HTMLPurifier($config);
$temp = $purifier->purify($temp);
Run Code Online (Sandbox Code Playgroud) 我正在使用HTMLPurifier,即使你拥有:
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
Run Code Online (Sandbox Code Playgroud)
它会从链接中删除所有"目标"属性.
知道为什么要这样做吗?
目前我在HTMLPurifier中使用此代码来允许data-*
HTML标记属性:
$def = $config->getHTMLDefinition(true);
$def->addAttribute('div', 'data-aaa', 'Text');
$def->addAttribute('div', 'data-bbb', 'Text');
// ...
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以同时允许所有data-*
属性,最好是在所有HTML标签上?(在我的情况下,它们不是安全问题 - 当然,据我所知)
我正在使用HTML Purifier来保护我的应用程序免受XSS攻击.目前我正在从WYSIWYG编辑器中净化内容,因为这是唯一允许用户使用XHTML标记的地方.
我的问题是,我是否应该在登录验证系统(或注册页面的输入字段,如电子邮件,姓名,地址等)上使用HTML Purifier用户名和密码?那里有XSS攻击的机会吗?
我正在使用HTMLPurifier
来清理HTML字符串(它是关于安全性的).
调用HTMLPurifier时会删除某些属性(如width
或height
).我不认为这是一个安全问题.
如何在不重新定义白名单的情况下添加此属性?
我搜索了Stackoverflow和HTMLPurifier文档,但唯一的解决方案似乎是:
$config->set('HTML.Allowed', 'p,b,a[href],i');
Run Code Online (Sandbox Code Playgroud)
但这不是一个解决方案,因为我不想重新定义白名单(我相信默认的HTMLPurifier配置,我只想添加一个例外).
如何允许base64数据用于图像标记的src属性?我看到这样的代码:
$config->set('URI.AllowedSchemes', array('http' => true, 'https' => true, 'mailto' => true, 'ftp' => true, 'nntp' => true, 'news' => true, 'data' => true));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否data => true
允许base64?如果是这样,我怎么能只允许base64数据用于img标签的src属性?(我不想在其他情况下允许数据URI.)
我想过做的事情:
$ def-> addAttribute ('a', 'target', 'Enum # _blank, _self, _target, _top');
Run Code Online (Sandbox Code Playgroud)
但在我的情况下像这样:
$ def-> addAtribute ('img', 'src', 'Enum # data, http, https, ...);
Run Code Online (Sandbox Code Playgroud)
这可能吗?