zoukankan      html  css  js  c++  java
  • laravel5.2总结--csrf保护

     
    CSRF攻击:
        CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
     
    Laravel 会自动生成一个 CSRF token 给每个用户的 Session。该 token 用来验证用户是否为实际发出请求的用户。
    可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段:
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
     
    1>可以在 Blade模板引擎中使用:
    {{ csrf_field() }}
    或者使用原生写法
    <?php echo csrf_field(); ?>
     
    你不需要手动验证 POST、PUT 或 DELETE 请求的 CSRF token。VerifyCsrfToken HTTP 中间件将自动验证请求与 session 中的 token 是否相符。
     
    2>在 Laravel VerifyCsrfToken 中间件也会检查请求标头中的 X-CSRF-TOKEN。
    例如,你可以将其保存在 meta 标签中:
    <meta name="csrf-token" content="{{ csrf_token() }}">
    一旦你创建了 meta 标签,你就可以使用 jQuery 之类的函数库将 token 加入到所有的请求标头。基于 AJAX 的应用,提供了简单、方便的 CSRF 保护:
    $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
     
    3>Laravel 也会在 XSRF-TOKEN cookie 中保存 CSRF token。
    你也可以使用 cookie 的值来设置 X-XSRF-TOKEN 请求标头。一些 JavaScript 框架会自动帮你处理,例如:Angular。你不大可能会需要手动去设置这个值。
     
    4>有时候希望一组 URIs 不要被 CSRF 保护。
    可以在 VerifyCsrfToken 中间件中增加 $except 属性来排除 URIs:
    <?php namespace AppHttpMiddleware; use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * URIs 应被 CSRF 验证执行。 * * @var array */ protected $except = [ 'stripe/*', ]; }
  • 相关阅读:
    nginx系列11:负载均衡哈希算法ip_hash与hash模块
    nginx系列10:通过upstream模块选择上游服务器和负载均衡策略round-robin
    nginx系列9:HTTP反向代理请求处理流程
    css 滚动条样式
    Vue优化:常见会导致内存泄漏问题及优化
    vue自定义指令导致的内存泄漏问题解决
    vue动态绑定class的几种方式
    前端知识点回顾之重点篇——CSS中flex布局
    Javascript数组操作
    pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)
  • 原文地址:https://www.cnblogs.com/redirect/p/7457051.html
Copyright © 2011-2022 走看看