PHP防止xss

时间:2011-02-27 07:35:19

标签: php xss

htmlentities是防止PHP中XSS的最佳解决方案吗?另外,我想允许简单的代码,例如biaimg。实现这一目标的最佳解决方案是什么?我确实考虑过bbcode,但发现如果没有正确实现我也会有XSS问题。我该怎么办?欢迎任何好的第三方图书馆。

编辑:

我刚试过HTML Purifier,但在这种情况下它失败了。 Just see this example

3 个答案:

答案 0 :(得分:3)

为此,我会选择HTML Purifier,是的,您也可以在那里指定白名单标签。

  

HTML Purifier符合标准   用PHP编写的HTML过滤器库。   HTML Purifier不仅会删除所有内容   恶意代码(俗称为   XSS)经过全面审核,
  它安全而宽松的白名单
  还将确保您的文件   符合标准,只有一些东西   可以全面实现   了解W3C的规范。

我知道PHP 语言中有某些功能,但我更喜欢专用的解决方案。

答案 1 :(得分:2)

查看自定义标记语言,例如markdown(由stackoverflow使用),reStructuredTexttextile或类似lightweight markup languages

答案 2 :(得分:1)

尝试使用此代码(它允许<i><b><del>):

<?php                                                                                                                                                                            

$html = '<b>Inline <del>context <div>No block allowed <great going </div></del></b>';                                                                                          

function escapeEveryOther(&$v, $k) {                                                                                                                                           
    if($k % 2 == 0) {                                                                                                                                                          
        $v = htmlspecialchars($v);                                                                                                                                             
    }                                                                                                                                                                          
}                                                                                                                                                                              

$parts = preg_split('`(</?(?:b|i|del)>)`is', $html, -1, PREG_SPLIT_DELIM_CAPTURE);                                                                                             
array_walk($parts, 'escapeEveryOther');                                                                                                                                        

$html = implode('', $parts);      

然后将$html传递给HTMLPurifier以修复不匹配的代码开头和关闭。