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

端木兴国
2023-12-01

在我的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

 类似资料: