【发布时间】:2013-02-01 14:52:57
【问题描述】:
我使用 Markdown 提供了一种在我的论坛脚本中向我的用户写帖子的简单方法。
我正在尝试清理每个用户输入,但我对 Markdown 的输入有疑问。
我需要在数据库中存储 Markdown 文本,而不是 HTML 转换的版本,因为允许用户编辑他们的帖子。
基本上我需要像 StackOverflow 那样的东西。
我阅读了this article 关于 Markdown 的 XSS 漏洞。我发现的唯一解决方案是在我的脚本提供的每个输出之前使用 HTML_purifier。
我认为这会减慢我的脚本,我想输出 20 个帖子并为每个帖子运行 HTML_purifier...
因此,我试图找到一种解决方案来清除 XSS 漏洞,从而清除输入而不是输出。
我无法在输入上运行 HTML_purifier,因为我的文本是 Markdown,而不是 HTML。如果我将其转换为获取 HTML,我将无法将其转换回 Markdown。
我已经删除(我希望)所有 HTML 代码:
htmlspecialchars(strip_tags($text));
我已经考虑过另一种解决方案:
当用户尝试提交新帖子时: 将输入从 Markdown 转换为 HTML,运行 HTML_purifier,如果它发现一些 XSS 注入,它只会返回一个错误。 但我不知道怎么做,也不知道 HTML_purifier 是否允许。
我在那里发现了很多关于同一问题的问题,但所有解决方案都是将输入存储为 HTML。我需要存储为 Markdown。
有人有什么建议吗?
【问题讨论】:
-
1.使用
strip_tags()从输入中删除 所有 标记,2. 清理在 [link](javascript:alert('xss')) 等属性中使用的输入:3. 考虑运行htmlspecialchars()在将输入转换为 HTML 和输出之前。应该是相当安全的吧?我的意思是只有你可以控制要使用的 HTML 标签,只要你在输入中剥离它们并清理你可以完全控制 XSS 的属性。 -
它不会阻止我的链接中显示的错误。
-
嗯,如果它没有检测到多行标签,那就太令人沮丧了..
-
你能解释一下你的句子吗?我不明白。
-
我认为您在链接中提到的漏洞或错误表明,如果您将 html 标签分成多行,则不会正确剥离它。
标签: php html xss markdown code-injection