用户输入&符号搞乱了我的网站w3c验证

时间:2009-10-24 10:48:22

标签: php xhtml w3c-validation html-encode

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

3 个答案:

答案 0 :(得分:8)

显示用户制作的内容时,请通过htmlspecialchars()功能运行。

答案 1 :(得分:2)

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

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

  1. 转义文本数据,以便特殊字符替换为代表它们的HTML实体。
  2. 摘录过滤不安全的HTML标记。
  3. 验证 HTML不包含任何不安全或非法的结构。
  4. 如果您的用户输入要被解释为文本,那么您主要关注选项1;如果您让用户使用HTML,那么您正在查看选项2和3.第四个选项是让用户使用一些限制性更强的非HTML标记,例如Markdown或bbCode,使用标记在HTML标记和HTML之间进行转换库(希望)不允许注入安全漏洞,破坏页面的构造或其他可怕的东西。

答案 2 :(得分:2)

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

这可以实现各种令人讨厌的事情,最明显的是跨站点脚本(XSS)攻击和注入隐藏的垃圾邮件(隐藏起来,而不是搜索引擎机器人)。

你应该:

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

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