表单方法伪造
laravel 遵循 RESTful 架构的规范,支持很多 http 动词,但是传统的 html 表单只支持 GET 和 POST , 所以,如果我们想使用其余的 http 动词,就要用到表单方法伪造。
<form action="/tasks/5" method="POST"><input type="hidden" name="_method" value="DELETE"><!-- or: -->@method('DELETE')</form>
csrf 防止跨站请求伪造
laravel 中除去只读路由()外,所有路由都需要令牌(名字为: _token),以防止 csrf(cross-site request forgery) 防止跨站请求伪造攻击。该令牌在每个会话开始时生成,之后与路由提交的 _token 进行比较。
In HTML forms
<form action="/tasks/5" method="POST">
<?php echo csrf_field(); ?>
<!-- or: -->
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<!-- or 5.6之后 : -->
@csrf
</form>
In JavaScript applications
通常 token 存储在 标签中
<meta name="csrf-token" content="<?php echo csrf_token(); ?>" id="token">
全局设置 csrf 的 header
// In jQuery:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// With Axios:
window.axios.defaults.headers.common['X-CSRF-TOKEN'] =
document.head.querySelector('meta[name="csrf-token"]');
然后,laravel 会对每个请求中的 X-CSRF-TOKEN 进行校验。
tip: 如果你使用 laravel 默认安装的 vue 引导程序,你将不需要这些设置,因为 laravel 已经为你设置好了,贴心!
