CSRF Protection trong Laravel

Cross-site request forgeries là một loại khai thác ô nhiễm, theo đó những lệnh trái phép được thực thi thay mặt đại diện cho người dùng đã được xác nhận. Rất may, Laravel giúp thuận tiện bảo vệ ứng dụng của bạn khỏi những cuộc tiến công trá hình nhu yếu ( CSRF ) trên nhiều website .

Giải thích về lỗ hổng bảo mật

Trong trường hợp bạn không quen với việc giả mạo yêu cầu trên nhiều trang web, hãy thảo luận về một ví dụ về cách lỗ hổng này có thể bị khai thác. Hãy tưởng tượng ứng dụng của bạn có /user/ đường dẫn email chấp nhận yêu cầu POST để thay đổi địa chỉ email của người dùng đã xác thực. Nhiều khả năng, route này yêu cầu một trường nhập email chứa địa chỉ email mà người dùng muốn bắt đầu sử dụng.

Nếu không có bảo vệ CSRF, một trang web độc hại có thể tạo một biểu mẫu HTML trỏ đến đường dẫn /user/ email của ứng dụng của bạn và gửi địa chỉ email của chính người dùng độc hại:

 

Bạn đang đọc: CSRF Protection trong Laravel

Nếu website ô nhiễm tự động hóa gửi biểu mẫu khi trang được tải, người dùng ô nhiễm chỉ cần dụ người dùng không hoài nghi ứng dụng của bạn truy vấn website của họ và địa chỉ email của họ sẽ được biến hóa trong ứng dụng của bạn .
Để ngăn ngừa lỗ hổng này, tất cả chúng ta cần kiểm tra mọi nhu yếu POST, PUT, PATCH hoặc DELETE đến để tìm giá trị phiên bí hiểm mà ứng dụng ô nhiễm không hề truy vấn .

Ngăn chặn yêu cầu CSRF

Laravel tự động hóa tạo CSRF token cho mỗi phiên người dùng đang hoạt động giải trí do ứng dụng quản trị. Token này được sử dụng để xác định rằng người dùng được xác nhận là người thực sự đưa ra những nhu yếu so với ứng dụng. Vì mã thông tin này được tàng trữ trong phiên của người dùng và biến hóa mỗi khi phiên được tạo lại, ứng dụng ô nhiễm không hề truy vấn vào nó .

Hiểu nôm na là khi các bạn gửi request lên website thì Laravel sẽ tạo một chuỗi string ngẫu nhiên và lưu vào session của php. Và khi mình muốn gửi data lên thì phải truyền thêm cái token đó để kiểm tra xem trùng nhau ko. Nếu không thì nó sẽ không cho xử lý.

use Illuminate\Http\Request;

Route::get('/token', function (Request $request) {
    $token = $request->session()->token();

    $token = csrf_token();

    // ...
});

Bất kể khi nào bạn submit form thì bạn nên thêm CSRF token ở trong form của bạn để middleware bảo vệ CSRF có thể xác thực request của bạn. Để thuận tiện bạn có thể xài @csrf ở blade template để tạo một trường ẩn CSRF token.

@csrf

Loại trừ URI khỏi Bảo vệ CSRF

Đôi khi bạn hoàn toàn có thể muốn loại trừ một tập hợp những URI khỏi bảo vệ CSRF. Ví dụ : nếu bạn đang sử dụng Stripe để giải quyết và xử lý thanh toán giao dịch và đang sử dụng mạng lưới hệ thống webhook của họ, bạn sẽ cần phải loại trừ tuyến giải quyết và xử lý webhook của Stripe khỏi chính sách bảo vệ CSRF vì Stripe sẽ không biết mã thông tin CSRF nào sẽ gửi đến những tuyến của bạn .

Thông thường, bạn nên đặt các loại route này bên ngoài nhóm phần mềm trung gian webApp\Providers\RouteServiceProvider áp dụng cho tất cả các route trong danh sách routes/web.php. Tuy nhiên, bạn cũng có thể loại trừ các tuyến đường bằng cách thêm URI của chúng vào thuộc tính $except của phần mềm trung gian VerifyCsrfToken:

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

Nếu những bạn có vướng mắc gì vui vẻ phản hồi ở bên dưới .
Cảm ơn bạn đã đọc hết bài viết này .

Source: https://tuvi365.net
Category : BLOG

Related Posts

Leave a Reply

Your email address will not be published.