Laravel在AWS上不安全地提供资产

10

我的新项目在我将应用部署到https://域名时,每个{{ asset() }}{{ route() }}都会通过http进行服务(这会在浏览器中引起“混合内容”安全问题)。

我正在使用带有负载均衡的Elastic Beanstalk应用程序的AWS。

我已尝试确保APP_URL正确设置为https,并且我知道我可以使用secure_assetforceScheme,但是我在之前的项目中没有必要这样做,我想了解原因。

我如何查看Laravel关于协议的决策?我想找到问题的根源而不是简单地掩盖它。


3
你的 SSL 证书是由 AWS 负载均衡器实现的吗?如果是,Laravel 包含了 Fideloper/TrustedProxies 包以处理此问题。你需要发布配置并将代理设置为 *,因为负载均衡器转发 IP 可能会变化。 - Rob Fonseca
@RobFonseca 是的,我刚发现了这个问题。你完全正确。 - Chuck Le Butt
2个回答

19

这是一个常见的坑。如果您正在使用 AWS,您需要更改配置。这很简单,像往常一样,Laravel 的文档提供了解决方案。您可以在此处阅读更多信息:

https://laravel.com/docs/5.6/requests#configuring-trusted-proxies

enter image description here

作为 AWS Elastic Beanstalk 用户,我所要做的就是编辑 app/Http/Middleware/TrustProxies.php

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array
     */
    protected $proxies = '*';

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
}

现在一切都好了。在设置新项目时很容易忽略。


2
谢谢你提供的关于信任代理的提示。我使用了https://github.com/fideloper/TrustedProxy,它完美地解决了我的问题。 - shalonteoh
@shalonteoh 不确定您的意思。 Laravel 已经预装了 TrustedProxy。这就是上面的代码所指的内容。 - Chuck Le Butt

0

我相信secure_asset是你正在寻找的。
这里有一个例子:

<link href="{{ secure_asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" />

更新:

一个更好的解决方案(在laravel 5.4中测试通过):

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    if(env('APP_ENV') == 'production') {
        \URL::forceScheme('https');
    }
}

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}
}

我知道我可以使用 secure_assetforceScheme,但是在我的上一个项目中我不需要这样做,我想了解为什么。 - Chuck Le Butt
你现在使用的是哪个版本的Laravel?之前使用的是哪个版本? - Gothiquo
之前版本:5.5。当前版本:5.6。 - Chuck Le Butt
我认为路径是通过URL设置生成的。请检查您的.env文件。也许您已将URL定义为类似于URL=http://yoursite.com的内容。 - Gothiquo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接