PHP有一个明确的反XSS库吗?

时间:2010-10-20 02:03:21

标签: php security input xss

我已经知道XSS是如何工作的,但是找出所有注入恶意输入的方法并不是一种选择。

我在那里看到了几个库,但大多数都是非常不完整,无效或GPL许可(你们什么时候才能知道GPL不适合分享小库!使用麻省理工学院)

7 个答案:

答案 0 :(得分:17)

OWASP提供了一个编码库,用于处理各种情况。

已过时:http://www.owasp.org/index.php/Category:OWASP_Encoding_Project

现在是http://code.google.com/p/reform/
 和OWASP的antiXSS特定库位于:http://code.google.com/p/php-antixss/

答案 1 :(得分:7)

htmlspecialchars()是您应该了解的唯一功能。

答案 2 :(得分:4)

HTMLPurifier是清理HTML输入的唯一最佳选择,htmlspecialchars应该应用于其他任何内容。

但是XSS漏洞不应该清理,因为任何此类提交都是垃圾。而是让您的应用程序保释并写入日志条目。实现XSS检测的最佳过滤器集在mod_security core rules

我在new input()中使用了一个不可思议但非常彻底的属性检测,请参阅_xss方法。

答案 3 :(得分:3)

修改:感谢@mario指出一切都取决于上下文。确实没有超级方式可以在所有情况下全部阻止它。你必须相应调整。


编辑我对@bobince和@ Rook在此问题上的支持表示反对并非常感谢。我现在非常清楚 strip_tags不会以任何方式阻止XSS攻击

我在回答之前已经扫描了所有代码,看看我是否以任何方式曝光,并且由于htmlentities($a, ENT_QUOTES)我一直主要用来应对W3C而一切都很好。

那说我已经更新了下面的功能,有点模仿我使用的功能。我仍然发现h strip_tags在htmlentities之前很高兴,所以当用户尝试输入标签时,他们不会污染最终结果。假设用户输入了<b>ok!</b>,将其显示为ok!比打印出已转换的全文文本更好。

非常感谢您花时间回复并解释。


如果它来自互联网用户:

// the text should not carry tags in the first place
function clean_up($text) {
    return htmlentities(strip_tags($text), ENT_QUOTES, 'UTF-8');
}

如果它来自后台......不要。

公司的某些人可能需要为此页面或该页面使用javascript,这是完全正确的理由。能够记录和责备比关闭你的更好。

答案 4 :(得分:1)

我很喜欢htmlpurifier,但我知道它效率低,因为它相当大。此外,它是LGPL,我不知道这是否属于你的GPL禁令。

答案 5 :(得分:1)

除了zerkms's answer之外,如果您发现需要接受用户提交的HTML(例如,来自WYSIWYG编辑器),您将需要使用HTML解析器来确定哪些可以提交,哪些不能提交

我使用并推荐HTML Purifier

注意:甚至尝试使用正则表达式:)

答案 6 :(得分:0)

我很惊讶这里没有提到,但我更喜欢htmlAwed到htmlPurifier。它是最新的,很好的许可,非常小,非常快。