gpt4 book ai didi

php - 如何从用户输入的 Markdown 中删除脚本标签?

转载 作者:可可西里 更新时间:2023-10-31 22:41:48 25 4
gpt4 key购买 nike

在我的 php 应用程序中,我有一个文本框,它从用户那里接收 Markdown (比如 stackoverflow 的),然后它显示在网站上。我正在使用 Laravel 框架并使用 parsedown-laravel包裹。
我能做到:

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

有效。

{!! Markdown::parse('<h1>Hello</h1> Markdown!'); !!}

它仍然有效。我对此没有意见。

现在如果我这样做:

{!! Markdown::parse('<script>alert("XSS Attack!!!")</script> Markdown!'); !!}

它仍然有效!!!

如何使用 Laravel 和这个包在我的应用程序中阻止脚本标签?

最佳答案

如果您查看 Markdown 规范(original syntax by Jon GruberCommonMark),您会发现 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 过滤库,如 HTML Purifier .这将从您的 Markdown 输出中去除恶意代码,并尝试阻止 XSS 攻击。基本上,您应该首先调用 Markdown 解析器,然后使用该输出调用 HTML Purifier 库。

关于php - 如何从用户输入的 Markdown 中删除脚本标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com