0

我的社交网站是 w3c xhtml 有效的,但是用户可以发布博客报告和内容,有时会输入与号字符,这反过来又会扰乱我的验证。我该如何解决这个问题,是否有任何其他我需要注意的单个字符可能会扰乱我的验证?

4

3 回答 3

8

当显示用户制作的内容时,通过htmlspecialchars()函数运行它。

于 2009-10-24T10:52:57.700 回答
2

允许用户输入 HTML 标记是个坏主意。

这使得各种令人讨厌的事情成为可能,最明显的是跨站点脚本 (XSS) 漏洞利用和隐藏垃圾邮件的注入(对您隐藏,而不是搜索引擎机器人)。

你应该:

  • 使用 删除所有 HTML 标记,htmlspecialchars()并且仅保留使用nl2br(). 您可以通过实现自己的安全标记来允许某些格式,该标记只允许非常特定的标记(例如 phpBB 或类似 Wiki 的标记)。

  • 使用HTML Purifier可靠地消除所有潜在危险的标记。如果您使用白名单参数, PHP 的strip_tags()功能从根本上被破坏并且允许在属性中使用危险代码。

于 2009-10-26T20:40:07.040 回答
2

作为一般原则,将用户提交的(或实际上任何外部的)内容直接包含到您的页面中而不进行验证或过滤是错误的。除了导致验证错误之外,它还可能导致“页面损坏”和大型安全漏洞(跨站点脚本攻击)。

每当您从任何不是 100% 受信任的地方获取数据时,您都需要以某种方式使其安全。您可以通过执行以下部分或全部操作来做到这一点:

  1. 转义文本数据,以便将特殊字符替换为表示它们的 HTML 实体。
  2. 剥离过滤不安全的 HTML 标签。
  3. 验证HTML 不包含任何不安全或非法的结构。

如果您的用户输入要被解释为文本,那么您主要看的是选项 1;如果您让用户使用 HTML,那么您正在查看选项 2 和 3。第四个选项是让用户使用一些更具限制性的非 HTML 标记,例如 Markdown 或 bbCode,在该标记和 HTML 之间使用(希望)不允许注入安全漏洞、分页结构或其他可怕事物的库。

于 2009-10-24T11:08:05.720 回答