[PHP] - Laravel - CSRF token禁用方法
前文
CSRF攻擊和漏洞的參考文章:
http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
Laravel默認是開啟了CSRF功能,需要關閉此功能有兩種方法:
方法一
打開文件:app\Http\Kernel.php
把這行註釋掉:
‘App\Http\Middleware\VerifyCsrfToken‘
方法二
打開文件:app\Http\Middleware\VerifyCsrfToken.php
修改為:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// 使用CSRF
//return parent::handle($request, $next);
// 禁用CSRF
return $next($request);
}
}
CSRF的使用有兩種,一種是在HTML的代碼中加入:
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
另一種是使用cookie方式。
使用cookie方式,需要把app\Http\Middleware\VerifyCsrfToken.php修改為:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return parent::addCookieToResponse($request, $next($request));
}
}
使用cookie方式的CSRF,可以不用在每個頁面都加入這個input的hidden標簽。
當然,也可以對指定的表單提交方式使用CSRF,如:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Add this:
if($request->method() == ‘POST‘)
{
return $next($request);
}
if ($request->method() == ‘GET‘ || $this->tokensMatch($request))
{
return $next($request);
}
throw new TokenMismatchException;
}
}
只對GET的方式提交使用CSRF,對POST方式提交表單禁用CSRF
修改CSRF的cookie名稱方法
通常使用CSRF時,會往瀏覽器寫一個cookie,如:
要修改這個名稱值,可以到打開這個文件:vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php
找到”XSRF-TOKEN“,修改它即可。
當然,你也可以在app\Http\Middleware\VerifyCsrfToken.php文件中,重寫addCookieToResponse(...)方法做到。
另外,如需要對指定的頁面不使用CSRF,可以參考如下文章:
http://www.camroncade.com/disable-csrf-for-specific-routes-laravel-5/
[PHP] - Laravel - CSRF token禁用方法