2014-11-18 24 views
5

Dường như Laravel 5 theo mặc định áp dụng bộ lọc CSRF cho tất cả các yêu cầu không nhận được. Đây là bật đèn xanh cho một hình thức POST, nhưng có thể là một vấn đề với một API mà POSTS xóa, vvLaravel 5: POST whithout CSRF kiểm tra

Câu hỏi đơn giản:

Làm thế nào tôi có thể thiết lập một lộ trình POST với bảo vệ CSRF?

+1

đó có nghĩa là bảo vệ được lấy ra. Tốt hơn là chuyển mã thông báo như là một phần của các cuộc gọi API. (Tôi biết đây là câu hỏi cũ, chỉ cảnh báo khách truy cập mới) – Kwebble

Trả lời

2

Hack My cho vấn đề:

CSRF bây giờ là một "trung gian" đã đăng ký trên toàn cầu trong App\Http\Kernel.php. Loại bỏ nó sẽ mặc định không có bảo vệ CSRF (hành vi Laravel4).

Để kích hoạt nó trong một con đường:

  1. Tạo một khóa ngắn tay trong ứng dụng của bạn/nhà cung cấp/RouteServiceProvider.php:

    protected $middleware = [ 
        // .... 
        'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', 
    ]; 
    
  2. Bây giờ bạn có thể kích hoạt nó cho bất kỳ Route :

    $router->post('url', ['middleware' => 'csrf', function() { 
    ... 
    }]); 
    

Không phải là giải pháp thanh lịch nhất IMO ...

5

Bạn có thể loại trừ các URI từ CSRF bằng cách đơn giản thêm chúng vào $except tài sản của VerifyCsrfToken middleware (app/Http/Middleware/VerifyCsrfToken.php):

<?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 = [ 
     'api/*', 
    ]; 
} 

Tài liệu: http://laravel.com/docs/5.1/routing#csrf-protection

+1

Tôi đã sử dụng cùng một cách để ngăn chặn bảo vệ mã thông báo CSRF trên các cuộc gọi API –

1

chỉ cần nghe nội dung này. Ngay trước 30 phút tôi đã phải đối mặt với cùng một vấn đề này. Bây giờ nó đã được giải quyết. chỉ cần thử này.

Goto App -> HTTP-> Kernel

mở tệp hạt nhân.

đó bạn có thể thấy: \ App \ Http \ Middleware \ VerifyCsrfToken :: lớp,

chỉ vô hiệu hóa mã đặc biệt này sử dụng //

thatz nó! Điều này sẽ làm việc!

Vì vậy mà bạn có thể loại bỏ các middleware từ API gọi (nếu bạn muốn như vậy ..)

11

Đến app/Http/Middleware/VerifyCsrfToken.php và sau đó nhập các tuyến đường của bạn (mà bạn muốn vô hiệu hóa CSRF token) trong $ trừ mảng .

ví dụ:

class VerifyCsrfToken extends BaseVerifier 
{ 

    protected $except = [ 

     '/register' 

    ]; 
} 
Các vấn đề liên quan