PHP htmlentities() 输入与输出

标签 php html xss sanitization html-entities

<分区>

Possible Duplicate:
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()?对于这种情况,普遍接受的方法是什么?

最佳答案

除非你能保证在你的应用程序的生命周期内,输入将被提供给网络浏览器,否则这个问题没有讨论的余地:你应该在输出上使用 XSS 保护,否则您最终将不得不根据具体情况对输出数据(无论可能是哪种输出)进行处理。这正是您当前对输入应用保护的论点。

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

关于PHP htmlentities() 输入与输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11275934/

相关文章:

php - TCPDF 在多个页面上拆分 html 表

javascript - WebRTC远程录音解决方案

apache - 当apache处理ssl时,如何让tomcat将重定向作为https url发送

javascript - 使用 CSP 防止自动点击链接 XSS 攻击

css - 我应该如何为 CSS 转义图像 URL?

php - 如何将 Blade 模板文件扩展名从 *.blade.php 更改为仅 *.blade

php - 什么是JS等价于PHP函数number_format?

html - 样式标签和输入标签相同

javascript - 让 <div> 在滚动时出现

html - 不能同时使用 @Html.LabelFor 和 <strong>