CSRF攻击与防御-start
-
什么是CSRF攻击?
- CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写。
- 跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。
-
日常生活中我们应当怎样预防CSRF攻击?
-
Laravel自动为每个用户Session生成了一个CSRF Token,该Token可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。正是根据本特性,Laravel则提供了两个辅助函数:
{{ csrf_field() }}
辅助函数和{{csrf_token()}}
辅助函数。 -
在我们提交表单的时候,必须要在form 表单里面加入下列中的其中一行代码,使其生成一个隐藏域:
<input type="hidden" name="_token" value="{{csrf_token()}}">
** 或者**
{{csrf_field()}}
这两个函数生成的是同一个隐藏域,表单内容如下:
<input type="hidden" name="_token" value="4odLZvJowyNLTSATEbAn67mkua6rwFNIGJZqKlfH">
在每一个POST提交后,都必须要有这个隐藏域,这样就避免了CSRF攻击。
-
Laravel自动为每个用户Session生成了一个CSRF Token,该Token可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。正是根据本特性,Laravel则提供了两个辅助函数:
-
从 CSRF 保护中排除指定 URL
-
要实现这一目的,只需要在 **
(app/Http/Middleware/VerifyCsrfToken.php)
中间件中将要排除的 URL 添加到 $except 数组中即可。**
-
要实现这一目的,只需要在 **
-
Ajax 设置CSRF-Token
-
页面设置head中设置:
<meta name="csrf-token" content="{{ csrf_token() }}">
-
基于 AJAX 的应用提供了简单、方便的方式来避免 CSRF 攻击:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
-
CSRF攻击与防御-end
网友评论