表单方法伪造

laravel 遵循 RESTful 架构的规范,支持很多 http 动词,但是传统的 html 表单只支持 GET 和 POST , 所以,如果我们想使用其余的 http 动词,就要用到表单方法伪造。

  1. <form action="/tasks/5" method="POST">
  2. <input type="hidden" name="_method" value="DELETE">
  3. <!-- or: -->
  4. @method('DELETE')
  5. </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 已经为你设置好了,贴心!