验证不可信的HTML输入我必须处理每个输入


validating untrusted HTML input do I have to process each input?

针对跨站点脚本漏洞

1) 验证和转义每个用户输入的是个好主意吗

2) 使用strip_tag足够好吗?htmlpurifier相对于它有什么好处?

是的,这是个好主意。我甚至会说,如果你不这样做,你就是个白痴。在数据库中存储数据时,请使用准备好的语句和绑定的参数。如果你使用它(就像你应该使用的那样),你就不必手动转义进入数据库的数据。

现在,显示数据取决于您想要允许什么以及将在哪里输出。如果它将显示在HTML页面上,而您不希望呈现任何HTML,请使用htmlspecialchars($content, ENT_QUOTES)。您几乎不必使用htmlentities,因为它将转换所有有HTML实体的字符。这意味着它会使您的文档变得不必要。如果你想允许一些HTML,你必须在显示它之前进行过滤(使用HTML净化器)。

请注意,不同的存储机制和不同的输出介质需要不同的转义/清除策略。