令人难以置信,有几个相同的结果是错误的答案。
Laravel 将纯 php 代码保存到 Storage/fremework/view
当然,如果你有成千上万的浏览量,要花上一个世纪才能找到你想要的浏览量,但是打开任何一个,看看哪里有 {{ $text }} 现在有<?php echo $text; ?> 然后忘记 {{ $text }} 并使用<?php print($text); ?>,但这仍然不是一个好主意,如果陌生人创建了 html,那么让我们创建我们的条件:
//Controller
<?php
$body = strip_tags($text, '<strong><span><p><b><small><pre><div><br><img><video><a><ul><li><ol><i><font><blockquote>');
return view('myview', compact('body'));
?>
//Blade
<iframe srcdocs="{{print($body)}}" sandbox></iframe>
or
<iframe srcdocs="{{$body}}" sandbox></iframe>
允许的标签
<strong><span><p><b><small><pre><div><br><img><video><a><ul><li><ol><i><font><blockquote>
是的,您可以在刀片语法中使用一些 php 函数,尽管这没有正确记录并且您也需要小心,因为 {{}} 与 echo 相同,所以如果您放置类似 print() 的内容, print_r 或 var_dump 会起作用,但更复杂的东西不起作用,它实际上并不能取代<?php ?>
为什么是 iframe?
注意,这不是普通的iframe,它有sandbox属性,而strip_tags()函数已经去掉了标签,iframe会字面上杀死onclick(),onerro()之类的,隔离代码,但是,一个悲观的人会说他还能用地址栏,其实laravel已经有了转义,不过你可以创建中间件,在app/http/kernel.php的中间件组中列出。因此,您将有机会确保请求的 url 符合条件
不那么痛苦的选择
如本文所述:https://kuztek.com/blog/use-laravel-purifier-securit 您可以使用 HTMLPurifier,请按照以下步骤操作
安装包:
composer require mews/purifier
生成配置文件:
php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
在 config/purifier.php 中更改“HTML.Allowed”
'HTML.Allowed' => 'h1[class],h2[class],h3[class],h4[class],h5[class],div[class],b,strong[style|class],i[class],em,a[href|title|class],ul[style|class],ol[style|class],li[style|class],p[style|class],br,blockquote[class],span[style|class],img[width|height|alt|src|class]',
无需进一步操作,只需在刀片上调用它,将 $body 替换为包含 html 代码的变量
{{ clean($body) }}