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