php – 来自XSS的Sanitize Markdown
我使用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)); 我想到了另一个解决方案: 当用户尝试提交新帖子时: 我在那里找到了很多关于同样问题的问题,但所有解决方案都是将输入存储为HTML.我需要存储为Markdown. 有人有什么建议吗? 解决方法
>在输入上运行Markdown
>在Markdown生成的HTML上运行HTML Purifier.配置它所以它允许链接,href属性等(它应该仍然剥离javascript:命令) // the nasty stuff :) $content = "> hello <a name="n" n href="javascript:alert('xss')">*you*</a>"; require '/path/to/markdown.php'; // at this point,the generated HTML is vulnerable to XSS $content = Markdown($content); require '/path/to//HTMLPurifier/HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); $config->set('Core.Encoding','UTF-8'); $config->set('HTML.Doctype','XHTML 1.0 Transitional'); $config->set('Cache.DefinitionImpl',null); // put here every tag and attribute that you want to pass through $config->set('HTML.Allowed','a[href|title],blockquote[cite]'); $purifier = new HTMLPurifier($config); // here,the javascript command is stripped off $content = $purifier->purify($content); print $content; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |