Laravel 使用 AWS 不安全地提供资产
Laravel serving assets insecurely with AWS
对于我的新项目,当我将我的应用程序部署到我的 https:// 域时,每个 {{ asset() }}
和每个 {{ route() }}
都在 http
上提供服务(这导致 "mixed content" 浏览器中的安全问题)。
我将 AWS 与负载均衡的 Elastic Beanstalk 应用程序结合使用。
我已经尝试确保 APP_URL
正确设置为 https,我知道我可以使用 secure_asset or forceScheme,但是我不必在我以前的项目中这样做,我想明白为什么。
如何查看 Laravel 在哪里做出有关协议的决定?我想找到问题的根源,而不是掩盖它。
我相信 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()
{
//
}
}
这是一个简单的问题。如果您使用的是 AWS,则需要更改您的配置。它非常简单,并且像往常一样,Laravel 的文档中有解决方案。您可以在这里阅读更多内容:
https://laravel.com/docs/5.6/requests#configuring-trusted-proxies
我(作为 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;
}
现在一切都很好。设置新项目时容易遗漏
对于我的新项目,当我将我的应用程序部署到我的 https:// 域时,每个 {{ asset() }}
和每个 {{ route() }}
都在 http
上提供服务(这导致 "mixed content" 浏览器中的安全问题)。
我将 AWS 与负载均衡的 Elastic Beanstalk 应用程序结合使用。
我已经尝试确保 APP_URL
正确设置为 https,我知道我可以使用 secure_asset or forceScheme,但是我不必在我以前的项目中这样做,我想明白为什么。
如何查看 Laravel 在哪里做出有关协议的决定?我想找到问题的根源,而不是掩盖它。
我相信 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()
{
//
}
}
这是一个简单的问题。如果您使用的是 AWS,则需要更改您的配置。它非常简单,并且像往常一样,Laravel 的文档中有解决方案。您可以在这里阅读更多内容:
https://laravel.com/docs/5.6/requests#configuring-trusted-proxies
我(作为 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;
}
现在一切都很好。设置新项目时容易遗漏