【发布时间】:2009-10-24 10:48:21
【问题描述】:
我的社交网站是 w3c xhtml 有效的,但是用户可以发布博客报告和内容,有时会输入与号字符,这反过来又会扰乱我的验证。我该如何解决这个问题,是否有任何其他我需要注意的单个字符可能会扰乱我的验证?
【问题讨论】:
标签: php xhtml w3c-validation html-encode
我的社交网站是 w3c xhtml 有效的,但是用户可以发布博客报告和内容,有时会输入与号字符,这反过来又会扰乱我的验证。我该如何解决这个问题,是否有任何其他我需要注意的单个字符可能会扰乱我的验证?
【问题讨论】:
标签: php xhtml w3c-validation html-encode
当显示用户制作的内容时,通过htmlspecialchars() 函数运行它。
【讨论】:
作为一般原则,将用户提交的(或实际上任何外部的)内容直接包含到您的页面中而不进行验证或过滤是错误的。除了导致验证错误之外,它还可能导致“页面损坏”和大型安全漏洞(跨站点脚本攻击)。
每当您从任何地方获得并非 100% 可信的数据时,您都需要以某种方式确保其安全。您可以通过执行以下部分或全部操作来做到这一点:
如果您的用户输入要被解释为文本,那么您主要关注的是选项 1;如果您让用户使用 HTML,那么您正在查看选项 2 和 3。第四个选项是让用户使用一些更具限制性的非 HTML 标记,例如 Markdown 或 bbCode,在该标记和 HTML 之间使用(希望)不允许注入安全漏洞、分页结构或其他可怕事物的库。
【讨论】:
允许用户输入 HTML 标记是个坏主意。
这会导致各种令人讨厌的事情,最明显的是跨站点脚本 (XSS) 漏洞利用和隐藏垃圾邮件注入(对您隐藏,而不是搜索引擎机器人)。
你应该:
使用 htmlspecialchars() 删除所有 HTML 标记,仅使用 nl2br() 保留换行符。您可以通过实现自己的安全标记来允许某些格式,该标记只允许非常特定的标记(例如 phpBB 或类似 Wiki 的标记)。
使用HTML Purifier 可靠地消除所有潜在危险的标记。 PHP 的 strip_tags() 函数从根本上被破坏,如果您使用白名单参数,则允许在属性中使用危险代码。
【讨论】: