2017-01-18 13 views
0

Мы используем встроенную защиту csrf от laravel 5.3 через метод {{ csrf_field() }}.Изменение CSRF-сбоя Код ответа HTTP в Laravel

Когда мы были запуск сканирования безопасности, которые явно не удается, сервер возвращая 500 Internal Server Error

Однако это на самом деле не ошибка сервера - как это клиент посылает плохую информацию - таким образом, она должна падать в диапазон 400 ошибок.

Я сделал небольшой кусочек рытья и косяк совсем понимает, как это на самом деле возвращает 500.

кто бы быть в состоянии предложить, как изменить этот ответ на что-то другое?

+0

какой у вас веб-сервер Apache или Nginx? когда-то эта ошибка возникает с сервером apache, это можно решить, изменив конфигурацию на сервере Apache. – SarangaR

+0

Его apache работает через прокси-сервер nginx - однако мы не беспокоимся о том, почему его ошибка, мы это знаем, мы просто хотим изменить код состояния, который возвращает – Owen

ответ

1

Вы можете изменить это с помощью файла App/Http/Middleware/VerifyCSRFToken.php так:

<?php 
namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; 
use Illuminate\Session\TokenMismatchException; 

class VerifyCsrfToken extends BaseVerifier { 

    public function handle($request, Closure $next) { 
     try { 
      return parent::handle($request, $next); 
     } catch (TokenMismatchException $ex) { 
      // throw custom exception like so: throw new CustomException($ex->getMessage()); 
      // or new HttpException with response code like so: abort(403, $ex->getMessage()); 
     } 
    } 
} 
+0

. Вы сэр - жемчужина :) Это хорошо работает – Owen

+0

случается, не было сообщения из исключения, поэтому мы добавили 'return abort (403, CSMF Token Mismatch). Пожалуйста, попробуйте снова отправить форму или немедленно связаться с нами. ');' – Owen

+0

Удивительные, приветственные слова! – Paras

1

В Laravel 5.3 вы идете в app/Exceptions/Handler.php и редактировать функцию render().

public function render($request, Exception $exception) 
{ 
    if ($exception instanceof TokenMismatchException) { 
     //do some stuff here. 
    } 
    return parent::render($request, $exception); 
} 
+1

Спасибо за ответ :) Я уверен, что это работает, однако, поскольку мы используем часовое и имеем дополнительную логику уже в наших функциях рендеринга, мы решили сохранить всю логику в промежуточном программном обеспечении csrf, а не разбивать между 2-мя местами :) – Owen