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

Php 测试所有路由是否配置为安全的,php,laravel,https,Php,Laravel,Https,不管您在routes.php中配置了什么,是否有必要强制Laravel将您的所有路由视为HTTPs 也就是说,我知道我可以用这样的东西安全地配置路由 Route::get('/logout', array('https', 'as'=>'logout' 我想让https自动添加到所有路由,即使开发人员这样做 Route::get('/logout', array('https', 'as'=>'logout' 如果开发人员未能将路由指定为安全路由,则确保路由安全 如果失败,(在我

不管您在routes.php中配置了什么,是否有必要强制Laravel将您的所有路由视为HTTPs

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

Route::get('/logout', array('https', 'as'=>'logout'
我想让
https
自动添加到所有路由,即使开发人员这样做

Route::get('/logout', array('https', 'as'=>'logout'
如果开发人员未能将路由指定为安全路由,则确保路由安全


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

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

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());
}

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

然后你就不用在你的路线中指定所有这些了

否则,如果您一意孤行地像现在这样做,我相信您可以使用Route::when()来检查它是否安全

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

+1以获取有用信息,但当请求具有其他查询字符串参数时会发生什么情况?或者是一篇帖子?不确定拉威尔是否会丢失你的查询数据,但是。。。编辑以提供一种检查它们的方法。感谢getRoutes方法,这正是我想要的。Re:不丢失数据——上面的代码
return Redirect::secure(Request::path())
不包含任何查询字符串参数,我们正在使用的laravel重定向方法中遇到类似的问题。我们不确定它是什么,但是强制URL是安全的解决了目前的问题,同时我们为维护版本安排了一个更长期的调查。哦!抱歉,刚刚更新到fullUrl(),其中也包含了查询。太棒了,我不知道这个方法+1提供有用的信息,但有些时候/方法Laravel会生成不安全的URL,即使您是从安全上下文浏览,Web服务器重定向也不会始终传递所有参数、cookie、,我们通过在路由中强制使用HTTPS解决了这些问题。你有没有Laravel不生成安全URL的例子?Laravel使用主机头中的任何内容。我想不出任何时候它会做些别的事情。