我正在使用 Laravel 5.1
我使用此代码将帖子保存到数据库
Auth::User()->posts()->save(Blog::create($request->all()));
当我用此代码显示帖子时,一些文本和图像我想清理 javascript 和危险代码!
<p>this is text</p>
<p> </p>
<p><img alt="" src="link" style="height:227px; width:342px" /></p>
<script>
alert("this is js");
</script>
{!! $post->内容!!}
当我使用时
{{ $post->content }}
我想要显示图像并防止危险代码任何解决方案
我不知道它是否适用于 laravel 5.1,但在 5.0 上,你可以使用这个:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class XSSProtection
{
/**
* The following method loops through all request input and strips out all tags from
* the request. This to ensure that users are unable to set ANY HTML within the form
* submissions, but also cleans up input.
*
* @param Request $request
* @param callable $next
* @return mixed
*/
public function handle(Request $request, \Closure $next)
{
if (!in_array(strtolower($request->method()), ['put', 'post'])) {
return $next($request);
}
$input = $request->all();
array_walk_recursive($input, function(&$input) {
$input = strip_tags($input);
});
$request->merge($input);
return $next($request);
}
}
并将其添加到Kernel.php
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\XSSProtection',
];
感谢 kirkbushell :http://laravel-tricks.com/tricks/laravel-5-xss-middleware
尝试
{{{ }}}
这将转义用户输入,您可以在将其存储到数据库之前使用它来敏感化,因此请检查这些函数 HTML::entities();
或 e()
您允许 html 代码进入我们的数据库是错误的做法。 话虽这么说,请确保在保存内容和输出时清理输入(使用 e($data['example'])) - 通过使用 {{ }} 或 {{{ }}} 至于图像,创建一个仅包含图像名称的表。使用控制器处理其余部分(图像位置和其他内容)。
好主意是创建名为帖子 ID 的子目录,然后在其中存储图像。
例如帖子 ID 7 将具有数据库中的 dir -> images/7/imagename。