Laravel 官方博客 的原文翻译:
11月7号,Insomnia Security 的 Chris Smith (@chrismsnz) 向 Laravel 开发小组发出了警告:在 Laravel 4 应用中发现了可以绕过 CSRF 校验的方法。
为了尽快修复此漏洞,请将 app/filters.php
文件中的默认 CSRF 路由过滤器修改为如下代码:
Route::filter('csrf', function()
{
if (Session::token() !== Input::get('_token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
注意:上面的代码和原始代码相比,只是将比较操作符由 !=
修改为 !==
(不仔细看还真是找不到),这样修改之后就可以防止精心伪造的 JSON 请求绕过此过滤器。
如果你的 Laravel 应用中使用到了 CSRF 保护机制,强烈建议修复上述漏洞。
译者注:Laravel 官方已经将此漏洞修复了,所以,如果你是“双十一”之后下载的 Laravel 代码将不受此影响。
此漏洞其实是 PHP 的字符串类型与数字类型比较时,PHP 自动将字符串转换为数字类型导致的,建议认真阅读 PHP 的官方文档:
http://php.net/manual/zh/language.types.string.php#language.types.string.conversion
http://php.net/manual/zh/language.operators.comparison.php