PHP htmlentities() 输入与输出

Ric*_*ler 5 html php xss sanitization html-entities

可能的重复:
PHP htmlentities() 在数据库插入之前输入,而不是输出

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

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

我应该注意,我看不到任何必须在我的应用程序中存储 HTML 输入数据的可预见情况,因此使用htmlentities()纯粹是为了 XSS 保护。万一我确实需要原始 HTML,我可以简单地调用html_entity_decode()reverse htmlentities()。此外,它使我免于忘记调用htmlentities()页面渲染并意外地将 XSS 漏洞利用插入到我的应用程序中。

我曾想过使用 Facebook 的 XHP 扩展的想法,但 XML 解析会引起相当多的开销,超出了我对应用程序感到满意的开销。


总结:我应该htmlentities()在输入上使用还是在输出上使用?对于这种情况,普遍接受的方法是什么?

Jon*_*Jon 3

除非你能保证在你的应用程序的生命周期内,输入只会被提供给网络浏览器,否则这个问题就没有讨论的意义:你应该对输出使用 XSS 保护,否则你最终将不得不修改你的数据输出(无论可能是什么类型的输出)根据具体情况而定。这正是您当前对输入应用保护的论点。

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