针对跨站点脚本漏洞
1) 验证和转义每个用户输入的是个好主意吗
2) 使用strip_tag足够好吗?htmlpurifier相对于它有什么好处?
是的,这是个好主意。我甚至会说,如果你不这样做,你就是个白痴。在数据库中存储数据时,请使用准备好的语句和绑定的参数。如果你使用它(就像你应该使用的那样),你就不必手动转义进入数据库的数据。
现在,显示数据取决于您想要允许什么以及将在哪里输出。如果它将显示在HTML页面上,而您不希望呈现任何HTML,请使用htmlspecialchars($content, ENT_QUOTES)
。您几乎不必使用htmlentities
,因为它将转换所有有HTML实体的字符。这意味着它会使您的文档变得不必要。如果你想允许一些HTML,你必须在显示它之前进行过滤(使用HTML净化器)。
请注意,不同的存储机制和不同的输出介质需要不同的转义/清除策略。