php 调用markdown,php – 如何从用户输入的markdown中删除脚本标记?

在我的php应用程序中,我有这个textarea框从用户接收markdown(如stackoverflow),然后它显示在网站上.我正在使用Laravel Framework并使用parsedown-laravel软件包.

我可以:

{!! Markdown::parse('__Hello__ Markdown!'); !!}

有用.

{!! Markdown::parse('

Hello

Markdown!'); !!}

它仍然有效.我对此很满意.

如果我这样做:

{!! Markdown::parse(' Markdown!'); !!}

它仍然有效!

如何使用Laravel和此软件包阻止我的应用程序中的脚本标记?

解决方法:

如果你看一下Markdown规范(original syntax by Jon Gruber或CommonMark),你会发现Markdown不应该取代HTML.它的唯一目标是让您更容易阅读您编写的文本.由于Markdown仅涵盖HTML标签的一小部分,因此您仍然可以使用内联HTML代码来创建您想要的内容.事实上,John Gruber说:

For any markup that is not covered by Markdown’s syntax, you simply use HTML itself. There’s no need to preface it or delimit it to indicate that you’re switching from Markdown to HTML; you just use the tags.

所以基本上,这就是Markdown的工作方式.显然,如果您正在解析用户的输入,则不应该这样.由于Markdown解析器输出HTML代码,因此您无法使用htmlentities函数或类似解决方案.

解决问题的最简单方法是使用像HTML Purifier这样的HTML过滤库.这将从Markdown输出中删除恶意代码,并尝试阻止XSS攻击.基本上,您应首先调用Markdown解析器,并使用该输出调用HTML Purifier库.

标签:php,xss,markdown,laravel

来源: https://codeday.me/bug/20190528/1169508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值