【问题标题】:Test that All Routes are Configred Secure测试所有路由是否配置安全
【发布时间】:2014-09-03 19:10:48
【问题描述】:

无论如何强制 Laravel 将所有路由视为 HTTPs,而不管您在 routes.php 中配置了什么?

也就是说,我知道我可以像这样安全地配置路由

Route::get('/logout', array('https', 'as'=>'logout'

我希望 https 自动添加到所有路由,即使开发人员这样做

Route::get('/logout', array('https', 'as'=>'logout'

如果开发人员未能将路由指定为安全,则确保路由安全。

如果做不到这一点,(在我自己深入研究之前)是否有一种已知的编程方式来获取所有路线的列表并检查它们是否安全?

【问题讨论】:

    标签: php laravel https


    【解决方案1】:

    您可以通过创建一个前置过滤器来强制它们检查当前请求是否安全:

    App::before(function($request)
    {
        if( ! Request::secure())
        {
            return Redirect::secure(Request::fullUrl());
        }
    });
    

    您也可以创建过滤器:

    Route::filter('force.ssl', function()
    {
        if( ! Request::secure())
        {
            return Redirect::secure(Request::fullUrl());
        }
    });
    

    并应用于一组路由:

    Route::group(['before' => 'force.ssl', function() {
    
        Route::get('test', 'Controller@action');
    
    });
    

    您仍然可以这样一一检查:

    $router = App::make('router');
    
    foreach($router->getRoutes() as $route)
    {
        var_dump($route->secure());
    }
    

    【讨论】:

    • +1 以获得有用的信息,但是当请求有额外的查询字符串参数时会发生什么?还是帖子?
    • 不确定 Laravel 是否会丢失您的查询数据,但是...已编辑以提供一种检查所有数据的方法。
    • 感谢 getRoutes 方法,正是我想要的。回复:不丢失数据——return Redirect::secure(Request::path()); 上面的代码不包含任何查询字符串参数,而且我们在使用的 laravel 重定向方法之一中遇到了类似的问题。我们不确定它是什么,但在我们为维护版本进行长期调查时,强制 URL 安全暂时可以解决问题。
    • 哦!抱歉,刚刚更新为 fullUrl(),其中也包含查询。
    • 太棒了,我不知道那个方法!
    【解决方案2】:

    如果您想确保所有路由安全,为什么不在 Apache 或 Nginx 中添加从 HTTP 到 HTTPS 的永久重定向?

    那么你就不必在你的路线中指定所有这些了吗?

    否则,如果您像现在这样死心塌地,我相信您可以执行 Route::when() 来检查它是否安全。

    Route::when('*', function($route, $request)
    {
        if( ! $request->secure())
        {
            return Redirect::secure($request->path());
        }
    }
    

    【讨论】:

    • +1 以获得有用的信息,但有时 Laravel 会生成一个不安全的 URL,即使你是从安全的上下文中浏览的,并且网络服务器重定向不会总是传递所有的参数、cookie 等。我们通过在路由中强制使用 HTTPS 解决了这些问题。
    • 你有 Laravel 没有生成安全 URL 的例子吗? Laravel 使用 HOST 标头中的任何内容。我想不出任何时候它会做其他事情。
    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2016-10-21
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多