测试所有路由是否配置为安全

时间:2014-09-03 19:10:48

标签: php laravel https

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

也就是说,我知道我可以用这样的东西安全地配置路由

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

我想要的是https自动添加到所有路线,即使开发人员这样做

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

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

如果做不到,(在我自己深入了解之前)是否有一种已知的程序化方法来获取所有路线的列表并检查它们是否安全?

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您尝试使所有路由安全,为什么不在Apache或Nginx中将永久重定向从HTTP添加到HTTPS?

然后你绕过必须处理指定路线中的所有内容?

否则,如果你像现在一样死定,我相信你可以做一个Route :: when()来检查它是否安全。

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