标签: htmlpurifier

HTMLPurifier真的是防弹吗?

我看到了Kohana框架,允许用户选择使用HTMLPurifier来对抗任何可能的XSS攻击.

我认为HTMLPurifier旨在允许HTML的标准兼容输出.

它是否有助于避免XSS攻击100%或可能在很大程度上?或者你会建议其他的东西.

谢谢

html php htmlpurifier

5
推荐指数
1
解决办法
905
查看次数

在Zend视图中是$ this-> escape()足够xss

$this->escape()在zend视图中做了很多.这足以阻止XSS吗?

Zend Framework之外还有HTMLPurifier.我想知道zend $this->escape()与HTMLPurifier 的比较.

php security xss zend-framework htmlpurifier

5
推荐指数
1
解决办法
1899
查看次数

HTMLPurifier允许类属性

我如何在HTMLPurifier中允许"class"?我试图净化这个:

 <div class="txt_r" id="test">Blah</div>
Run Code Online (Sandbox Code Playgroud)

我得到:

 <div id="test">Blah</div>
Run Code Online (Sandbox Code Playgroud)

为什么上课消失了?我正在使用下一个配置:

 $config->set('Attr.EnableID', true);
 $config->set('CSS.Trusted', true);
 $config->set('HTML.AllowedAttributes', 'style, src, class');
Run Code Online (Sandbox Code Playgroud)

html htmlpurifier

5
推荐指数
1
解决办法
5705
查看次数

HTML Purifier - 更改默认允许的HTML标记配置

我想允许用户可以在我的论坛中使用的HTML标签的有限白名单.所以我已经像这样配置了HTML Purifier:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p,a[href|rel|target|title],img[src],span[style],strong,em,ul,ol,li');
$purifier = new HTMLPurifier($config);
Run Code Online (Sandbox Code Playgroud)

我想知道的是,HTML Purifier的默认配置是否仍然适用,但接受的HTML标签数量减少或者我是否需要手动重新设置每个可能的配置参数?

另外,我应该以任何方式调整默认配置以保证安全吗?我是整个XSS保护的新手,是HTML Purifier的新手,并没有发现手册提供了很多"基本"提示和提示.

xss htmlpurifier

5
推荐指数
1
解决办法
4281
查看次数

如何让 HTML Purifier 从不允许的标签中删除内容?

我正在使用此代码来配置 HTML Purifier:

$config   = \HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'div,p,ol,ul,li,br'); // only allow these tags
$purifier = new \HTMLPurifier($config);
Run Code Online (Sandbox Code Playgroud)

我发现,虽然 HTMLPurifier 确实去除了诸如styleand 之类的标签table,但这些标签内的内容仍包含在纯化后的输出中。

如何让 HTML Purifier 不返回不允许的标签中的内容?

编辑:

我找到了Core.HiddenElements设置,这使得style标签上的内容似乎不应该显示在输出中,但根据我的配置,它们是。

我尝试将以下内容添加到我的代码中,但没有任何区别(style仍然显示标签的内容):

$config->set('Core.HiddenElements', array (
    'script' => true,
    'style' => true,
    'table' => true
));
Run Code Online (Sandbox Code Playgroud)

htmlpurifier

5
推荐指数
0
解决办法
1246
查看次数

在summernote中转义HTML

我正在使用名为summernote的wysiwyg,我发送给服务器的值,我用HTML Purifier净化它.之后我将它保存到DB(mysql).然后我需要在wysiwyg中显示纯化的html,因此将其写为textarea值(textarea在js中与summernote链接).但它显示转义的html而不是格式化文本.编辑器正常工作,js控制台显示没有错误.

Javascript我用来初始化summernote

      $('.summernote').summernote({
      lang: 'cs-CZ',
      height: 100,
      airMode: true,
      prettifyHtml: true
  });
Run Code Online (Sandbox Code Playgroud)

这是wysiwyg的屏幕截图(在空中模式下,因此未显示工具),控制台检查其值.

在此输入图像描述

所见即所得的拿铁模板:

 <textarea name="{$key}" class="summernote form-control" >{$value->value|noescape}</textarea> 
Run Code Online (Sandbox Code Playgroud)

html jquery htmlpurifier summernote nette

5
推荐指数
1
解决办法
3827
查看次数

HTML Purifier:根据其属性有条件地删除元素

根据HTML Purifier smoketest,偶尔会丢弃"格式错误"的URI以留下无属性的锚标记,例如

<a href="javascript:document.location='http://www.google.com/'">XSS</a><a>XSS</a>

...以及偶尔被剥离到协议,例如

<a href="http://1113982867/">XSS</a><a href="http:/">XSS</a>

虽然这本身没有问题,但它有点难看.我没有试图用正则表达式去除这些,而是​​希望使用HTML Purifier自己的库功能/注入器/插件/ whathaveyou.

参考点:处理属性

有条件地删除HTMLPurifier中的属性很容易.这里的库为类HTMLPurifier_AttrTransform提供了方法confiscateAttr().

虽然我不亲自使用的功能confiscateAttr(),我使用HTMLPurifier_AttrTransform按照这个线程添加target="_blank"到所有的锚.

// more configuration stuff up here
$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$anchor  = $htmlDef->addBlankElement('a');
$anchor->attr_transform_post[] = new HTMLPurifier_AttrTransform_Target();
// purify down here
Run Code Online (Sandbox Code Playgroud)

HTMLPurifier_AttrTransform_Target 当然,这是一个非常简单的课程.

class HTMLPurifier_AttrTransform_Target extends HTMLPurifier_AttrTransform
{
    public function transform($attr, $config, $context) {
        // I could call $this->confiscateAttr() here to throw away an
        // undesired …
Run Code Online (Sandbox Code Playgroud)

html php html-parsing htmlpurifier

4
推荐指数
1
解决办法
3008
查看次数

PHP:剥离包裹段落标记

我需要编写一个PHP函数来删除字符串中的开始和结束段落标记,但前提是它们位于开头/结尾.所以字符串:

"Simple Test"
"<p>Here</p>"
"<p>Test <p>Nested</p> Outside </p>"
Run Code Online (Sandbox Code Playgroud)

输出:

"Simple Test"
"Here"
"Test <p>Nested</p> Outside"
Run Code Online (Sandbox Code Playgroud)

HTMLPurifier可以这样做,还是应该使用substr?我的第一次尝试是:

if(strpos($str,'<p>') === 0  && strcmp(substr($str,-1,4),'</p>'))
$str = substr($str,3,strlen($str)-4);
Run Code Online (Sandbox Code Playgroud)

php substr htmlpurifier strip-tags

4
推荐指数
1
解决办法
4936
查看次数

即使使用$ config-> set('Attr.EnableID',true),HTML Purifier也会删除ID;

我遇到了HTML Purifier的问题,尽管使用配置选项来避免此类行为,但它会删除标题元素上的ID.

现在我正在使用:

// set up HTML Purifier for user inputs
require_once 'htmlpurifier/library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('Attr.EnableID', true);
$config->set('HTML.Trusted', true);

$purifier = new HTMLPurifier($config);
Run Code Online (Sandbox Code Playgroud)

然后我给它喂了一个字符串,如:

<h6 id="1843804297">This is a title</h6><h5 id="1979691494">This one too.</h5><h3 id="932393874">I think you see where this is going.</h3>
Run Code Online (Sandbox Code Playgroud)

我还尝试为ID标题创建列入白名单的条目无效,甚至直接操作存储在$ config对象中的默认值.

$config->def->defaults['Attr.EnableID'] = true;
Run Code Online (Sandbox Code Playgroud)

ID非常重要,因为它们是由PHP脚本分配的,存储在MySQL中,后来由JS导航系统选取.它们需要从用户输入,因为它们通常会保持静态以用于后续内容更新.

html php filtering user-input htmlpurifier

4
推荐指数
1
解决办法
430
查看次数

修改HTML Purifier中的所有链接

我正在使用HTML净化器删除所有不必要的/恶意的html标签.

$html = 'dirty html provided by user';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', 'p,a[href], ... other tags);
$purifier = new HTMLPurifier($config);;
$output = $purifier->purify($html);
Run Code Online (Sandbox Code Playgroud)

它的工作非常好,但我想多做一点.我想把我所有的<a href='link'>...</a>东西改成别的东西<a href='somefunc(link)' rel="nofollow" target="_blank"> ... </a>.

在搜索了一下后,我找到了以下相关链接,但问题是它需要修补一个复杂的库(这不是一个好主意,解决方案也有点复杂).

通过他们的论坛帖子阅读,看起来有添加nofollow参数的解决方案$config->set("HTML.Nofollow", true);,但我仍然无法找到如何修改每个链接.

我目前的解决方案是自己解析纯化的HTML并修改链接,但我认为有一种方法可以做到这一点HTML Purifier.

php htmlpurifier

4
推荐指数
1
解决办法
1701
查看次数