输入与输出之间的PHP htmlentities()

时间:2012-06-30 17:01:16

标签: php html xss sanitization html-entities

  

可能重复:
  PHP htmlentities() on input before DB insert, instead of on output

对于一个只是试图保护自己免受XSS攻击的PHP应用程序,应该在什么阶段调用htmlentities()函数?它应该在初始用户输入上调用,还是在输出数据的每个页面渲染上调用?

如果我在用户输入上使用htmlentities(),我最终会在数据库中存储更多数据。但是,从长远来看,我节省了CPU周期,因为我只需要对输入执行转换,而不再对该数据的后续输出执行转换。

我应该注意到,我看不到任何可预见的情况需要在我的应用程序中存储HTML输入数据,因此使用htmlentities()纯粹是为了XSS保护。万一我需要原始HTML,我只需拨打html_entity_decode()即可转发htmlentities()。此外,它使我免于忘记在页面呈现上调用htmlentities()并意外地将XSS漏洞插入到我的应用程序中。

我已经玩弄了使用Facebook的XHP扩展的想法,但是XML解析会导致相当多的开销,而不是我对我的应用程序感到满意。


摘要:我应该在输入或输出上使用htmlentities()吗?对这种情况采用的一般方法是什么?

3 个答案:

答案 0 :(得分:3)

除非您能保证在您的应用程序的生命周期中输入将被送到Web浏览器,否则无法讨论此问题:您应该在输出时使用XSS保护,否则你最终将不得不根据具体情况对输出数据进行按摩(无论输出的类型是什么)。这正是您当前对输入应用保护的论点。

即使现在也不太可能出现上述情况(更不用说在未指定的未来时间)恕我直言,答案显而易见。

答案 1 :(得分:2)

我更喜欢在输出中使用它,保持开放性,以便在没有html版本的输出时使用相同的数据。

答案 2 :(得分:0)

在输入时没有理由这样做。

如果你想要高性能,只需要制作2个字段:text,escaped_text并在第一个输出上填充第二个字段,并在更新时重置它。

如果您将使用模板引擎,它将为您转义所有数据。