Tìm kiếm bài viết

Laravel: Tìm hiểu về CSRF Protection

01.09.2020

5.0/5 (1 Reviews)

Laravel: Tìm hiểu về CSRF Protection, Laravel rất dễ dàng để bảo vệ các ứng dụng của bạn từ tấn công giả mạo (CSRF).

    Thiết kế web bạn có từng quan tâm đến bảo mật website của mình hay chưa? Bạn đang lập trình dự án bằng Laravel vậy bạn cóp tự hỏi bảo mật laravel bằng cách nào không? Bài viết này tôi tổng hợp kiến thức từ các bài viết cùng chủ để nói về bảo mật website laravel bằng CSRF Protection.

    Giới thiệu về CSRF Protection

    Laravel rất dễ dàng để bảo vệ các ứng dụng của bạn từ tấn công giả mạo (CSRF). Cross-site request forgery là một loại mã độc, theo đó các lệnh trái phép được thực hiện thay cho một người dùng đã được xác thực.

    Laravel tự động tạo ra một CSRF "token" cho mỗi phiên người dùng đang hoạt động do ứng dụng quản lý. Token này dùng để xác minh rằng người dùng đã được chứng thực là người thực hiện yêu cầu cho ứng dụng.

    Bất cứ khi nào bạn tạo mộ HTML form trong ứng dụng của bạn, bạn nên thêm một hidden field CSRF token vào trong form để bảo mật CSRF middleware có thể xác nhận request. Bạn có thể sử dụng csrf_field để sinh ra field này:

    <form method="POST" action="/profile">
        {{ csrf_field() }}
        ...
    </form>
    

    Class VerifyCsrfToken , bao gồm nhóm ```web`` middleware , sẽ tự động xác minh token từ request input giống với token lưu trong session.

    CSRF Tokens & JavaScript

    Khi xây dựng các ứng dụng dựa trên mã JavaScript, nó thật thuận tiện để có thư viện JavaScript HTTP của bạn tự động gắn mã thông báo CSRF vào mọi yêu cầu gửi đi. Theo mặc định, resources/assets/js/bootstrap.js file đăng ký giá trị của csrf-token meta tag với thư viện Axios HTTP. Nếu bạn không sử dụng thư viện này, bạn cần phải tự cấu hình behavior này cho ứng dụng của bạn.

    Loại trừ URIs khỏi CSRF Protection

    Đôi khi bạn muốn loại bỏ URIs khỏi CSRF protection. Ví dụ, nếu bạn sử dụng để xử lý thanh toán và được sử dụng hệ thống webhook của họ, bạn sẽ cần loại bỏ các xử lý route từ bảo mật CSRRF của Stripe webhook, khi đấy Stripe sẽ không biết CSRF token gửi đến route của bạn.

    Thông thường, bạn nên loại bỏ các loại routes từ bên ngoài nhóm web middleware mà RouteServiceProvider áp dụng cho tất cả các route trong routes/web.php file. Tuy nhiên, bạn có thể loại bỏ route bằng cách thêm URIs vào thuộc tính $except trong VerifyCsrfToken middleware :

    <?php
    
    namespace App\Http\Middleware;
    
    use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier
    {
        /**
         * The URIs that should be excluded from CSRF verification.
         *
         * @var array
         */
        protected $except = [
            'stripe/*',
        ];
    }
    

    X-CSRF-TOKEN

    Ngoài việc kiểm tra CSRF token như 1 tham số POST, VerifyCsrfToken middleware cũng kiểm traX-CSRF-TOKEN request header. Bạn có thể, ví dụ, lưu token trong thẻ HTML meta:

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    Sau đó, khi bạn đã tạo ra thẻ meta, bạn có thể hướng dẫn một thư viên như jQuery để tự động thêm token vào tất cả các request header. Điều này rất đơn giản, thuận tiện để bảo mật CSRF các ứng dụng AJAX của bạn:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    

    X-XSRF-TOKEN

    Laravel lưu CSRF token hiện tại trong XSRF-TOKEN cookie mỗi khi có response tạo ra bởi framework. Bạn có thể sử dụng cookie để đặt giá trị X-XSRF-TOKEN request header.

    Cookie này chủ yếu được gửi đến một cách thuận tiện từ khi một số frameworks và thự viện của JavaScript, như Angular và Axios, nó tự động thêm giá trị vào X-XSRF-TOKEN header.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    Kubernetes bài 6 - Vận hành k8s Day-Two Operations và Quản trị bằng GitOps

    22.05.2026

    Khi cụm Kubernetes của bạn đã được bảo mật cấu hình, tối ưu tài nguyên và thiết lập tự phục hồi, câu hỏi đặt ra là làm sao để duy trì sự ổn định đó trong nhiều năm tiếp theo mà không bị phụ thuộc

    thumbnail

    Kubernetes bài 5 - bảo mật Cloud Native và chuẩn DevSecOps cho K8s

    22.05.2026

    Việc siết chặt an ninh (Hardening) không phải là cấu hình một vài thông số rồi bỏ đó, mà là một tư duy phòng thủ chiều sâu.

    thumbnail

    Kubernetes bài 4 - Tối ưu Resource Auto-Healing và Scale Zero-Downtime

    22.05.2026

    Bài viết này sẽ đi sâu vào các cơ chế ở tầng Kernel giúp hệ thống tự phục hồi, chống lại các đợt tấn công cạn kiệt tài nguyên và cập nhật phiên bản mới mà người dùng không hề hay biết.

    thumbnail

    Kubernetes bài 3 - Bảo mật cấu hình k8s và config Security trên Production

    22.05.2026

    Kubernetes giải quyết bài toán này bằng hai đối tượng chuyên biệt nhưng nếu không hiểu rõ bản chất bảo mật ở tầng dưới, bạn đang tự tay dâng toàn bộ chìa khóa hệ thống cho hacker.

    thumbnail

    Kubernetes bài 2 - Mạng lưới k8s và luồng Traffic ở Packet Level

    22.05.2026

    Pod không chỉ là một container: Rất nhiều người nhầm lẫn Pod 1-1 với Container. Thực chất, Pod là đơn vị triển khai nhỏ nhất, có thể chứa một hoặc nhiều container

    Mục lục bài viết