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