2010-10-09 106 views
3

我试图从所见即所得(CK编辑器)的用户输入上运行HTMLPurifier,并且图像正在破坏。HTMLPurifier破坏图像

未过滤输入:

<img alt="laugh" src="/lib/ckeditor/plugins/smiley/images/teeth_smile.gif" title="laugh"> 

通过净化器使用默认设置运行后:

<img alt="&quot;laugh&quot;" src="%5C" title="&quot;laugh&quot;"> 

我试图改变的配置设置;但我的src永远不会被保留下来。有什么想法吗?

+1

用我的心灵调试的权力,我认为你有魔术引号。 – 2010-10-09 08:12:53

回答

4

我怀疑magic_quotes可能是一个原因..?

你也试过$config->set('Core.RemoveInvalidImg',true);。你正在使用哪个版本? (尝试更旧或更新)

+0

我正在使用版本4.1.1。我尝试使用建议的配置设置,但没有运气。我没有在字符串上运行任何其他清理例程,它通过MySqli准备好的语句存储到数据库中。 – pws5068 2010-10-09 15:08:45

+0

我误读了“magic quotes”来调用mysql_escape_string。你是绝对正确的,我的php.ini文件被设置为自动转义引号:magic_quotes_gpc设置为ON。问题解决了。谢谢! – pws5068 2010-10-09 15:20:47

1

我不知道htmlpurifier是什么,但在运行它之前,您拥有的img标记完全合法(除非它是未封闭的)。在你运行它之后,它会双倍地逃避东西,而这看起来就像是垃圾。 %5C是反斜杠的网址代码。似乎它试图用反斜杠逃避前斜线,然后它窒息。这个计划是什么?我可以推荐HTML Tidy吗?

+0

Unary标签不需要'/>'在HTML中关闭它们;这是一个XHTML习惯用法。 – 2010-10-09 06:27:07

+0

为什么你会打扰使HTML不能成为XHTML。所有的XHTML都可以是HTML。例如,由于上述原因,相反的情况并非如此。 – 2010-10-09 06:49:41

+0

感谢您的帮助,我开始使用HTML tidy,但转移到净化器以保护XSS。至于html/xhtml,我仅限于CK编辑器在这种情况下生成的内容。我可能最终修改它为一个类似BB代码的方法 – pws5068 2010-10-09 15:04:57

3

有同样的问题。 这个固定

if (get_magic_quotes_gpc()) { 
function stripslashes_gpc(&$value) 
{ 
    $value = stripslashes($value); 
} 
array_walk_recursive($_GET, 'stripslashes_gpc'); 
array_walk_recursive($_POST, 'stripslashes_gpc'); 
array_walk_recursive($_COOKIE, 'stripslashes_gpc'); 
array_walk_recursive($_REQUEST, 'stripslashes_gpc'); 

}

+0

工作过,但不要忘记在将字符串保存到数据库之前再次执行addslashes()! – bart 2012-01-11 18:02:28

1

再回到旧的文章,我觉得这个小片段可能帮助其他人结束了在这里..

我固定的异常活动的许多在我的代码通过加入这一行到我的.htaccess文件

php_flag magic_quotes_gpc Off 

从PHP文件做转义字符“这一功能已被弃用的PHP 5中。 3.0和去除PHP的5.4.0" http://www.php.net/manual/en/security.magicquotes.what.php

而且,这里有其他的方法来禁用魔术引号 http://www.php.net/manual/en/security.magicquotes.disabling.php