加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 来自XSS的Sanitize Markdown

发布时间:2020-12-13 21:47:00 所属栏目:PHP教程 来源:网络整理
导读:我使用Markdown为我的论坛脚本中的用户提供了一种简单的写帖方式. 我正在尝试清理每个用户输入,但我对Markdown的输入有问题. 我需要在数据库中存储markdown文本,而不是HTML转换版本,因为用户可以编辑他们的帖子. 基本上我需要像StackOverflow那样的东西. 我
我使用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.

有人有什么建议吗?

解决方法

>在输入上运行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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读