【问题标题】:Laravel routing and CSRF protectionLaravel 路由和 CSRF 保护
【发布时间】:2015-03-11 22:09:33
【问题描述】:

如果我的 routes.php 文件中有这行代码:

Route::when('*', 'csrf', array('post', 'put', 'patch', 'delete'));

我还需要这样做吗?

Route::group(array('before' => 'csrf'), function() {
    Route::post('/search', array(
        'as' => 'search-post',
        'uses' => 'SearchController@postSearch'
    ));
});

或者这样做可以吗?

Route::post('/search', array(
    'as' => 'search-post',
    'uses' => 'SearchController@postSearch'
));

【问题讨论】:

  • 我如何检查它是否正常工作?我不熟悉 CSRF 保护。
  • 从表单中移除 CSRF 令牌,提交并检查是否有错误。它应该抛出异常。
  • @rotaercz 在浏览器的开发工具中,更改input type="hidden" name="_token" 字段的值。
  • 或者@ceejayoz 所说的
  • 伙计,你们太棒了。我马上回来。

标签: php laravel csrf


【解决方案1】:

Route::when 过滤器(内部称为 模式过滤器)在 before 过滤器之前调用。正常使用路线就可以了。

以下是相关源代码:

public function callRouteBefore($route, $request)
{
    $response = $this->callPatternFilters($route, $request);

    return $response ?: $this->callAttachedBefores($route, $request);
}

正如您首先看到的那样,将调用模式过滤器。如果他们返回任何响应,它将从这里返回,否则将调用过滤器之前的“正常”。

【讨论】:

  • 您回答了我的很多问题,我想公开表示感谢。当我启动该站点时,会有一个喊出部分。我想在里面谢谢你。我应该加你为 lukasgeiter 还是你想让我把你的名字放在那里?
  • 不客气 :) 好吧,“lukasgeiter”实际上是我的名字。如果你愿意,你可以写成“Lukas Geiter”;)
  • 会的,我会发给你一个链接! :)
【解决方案2】:

是的;你应该只用Route::post('/search', [...]);就安全了。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2018-05-27
    • 2019-09-13
    • 2023-03-28
    • 2015-08-03
    • 2022-11-16
    • 2015-01-17
    • 2020-05-10
    • 2019-11-12
    相关资源
    最近更新 更多