Hom*_*ien 4 php xss markdown laravel
在我的php应用程序中,我有这个textarea框,从用户接收markdown(如stackoverflow),然后它显示在网站上.我正在使用Laravel Framework并使用parsedown-laravel包.
我可以:
{!! Markdown::parse('__Hello__ Markdown!'); !!}
Run Code Online (Sandbox Code Playgroud)
有用.
{!! Markdown::parse('<h1>Hello</h1> Markdown!'); !!}
Run Code Online (Sandbox Code Playgroud)
它仍然有效.我对此很满意.
如果我这样做:
{!! Markdown::parse('<script>alert("XSS Attack!!!")</script> Markdown!'); !!}
Run Code Online (Sandbox Code Playgroud)
它仍然有效!
如何使用Laravel和此软件包阻止我的应用程序中的脚本标记?
如果你看一下Markdown规范(Jon Gruber或CommonMark的原始语法),你会发现Markdown不应该取代HTML.它的唯一目标是让您更容易阅读您编写的文本.由于Markdown仅涵盖HTML标签的一小部分,因此您仍然可以使用内联HTML代码来创建您想要的内容.事实上,John Gruber说:
对于Markdown语法未涵盖的任何标记,您只需使用HTML本身.没有必要为它添加前缀或分隔它以表明您正在从Markdown切换到HTML; 你只需使用标签.
所以基本上,这就是Markdown的工作方式.显然,如果您正在解析用户的输入,则不应该这样.由于Markdown解析器输出HTML代码,因此您无法使用该htmlentities函数或类似的解决方案.
解决问题的最简单方法是使用HTML过滤器,如HTML Purifier.这将从Markdown输出中删除恶意代码,并尝试阻止XSS攻击.基本上,您应首先调用Markdown解析器,并使用该输出调用HTML Purifier库.
ark*_*cha -2
接受用户输入并将其与应用程序代码无缝集成永远不可能是安全的。这是不行的。
如果这只是为了显示代码,那么您可以使用标签<textinput>来实现。您可以设置它的样式,使其看起来不像输入。或者您只需使用一个函数,例如htmlescape()与<pre>标签结合使用。
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |