はじめに
昨今,セキュリティーの重要性が高まっていくなか,現在あるWebAPIを提供するためにlaravelで開発しているところですが,これからの時代は暗号化通信が基本となるので自分がネットで類似する記事を探したところあまりヒットしなかったので,メモ程度に残します.
Middleware
簡単に説明すると,Middlewareは特定のルートに関連付けられた動作を行う前に読み込まれるフィルター機能のようなものです.
そのほかにもいろいろとログイン画面へ飛ばすとか,laravel4の時にあった機能で特定のルートに関連付けられた動作を終えたあとに作動させるフィルターも作れます.
(laravel4のときはApp::beforeおよびApp::afterで実装されていましたが,laravel5ではMiddlewareで実現させるように変更されたようです)
実装
まず,コマンドラインなどでlaravelのプロジェクトのルートへ移動します.
cd /var/www/app
次にphp artisan
でMiddlewareを作ります.
# php artisan make:middleware AppBefore
今回はAppBeforeというネームでMiddlewareを作成します.
次にapp/Http/Kernel.php
の$middleware
に'App\Http\Middleware\AppBefore'
を追加します.
<?php namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\AppBeforeFilter',
];
そして,Middlewareを編集します.
<?php namespace App\Http\Middleware;
use Closure;
class AppBeforeFilter {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->secure() && env('APP_ENV') === 'local') {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
上記はHTTPリクエストは暗号化通信で行われており,かつ環境がローカル環境であるかを確認し,そうでなければ,暗号化通信へ強制的にリダイレクトさせるようになっています.
上記の方法で暗号化通信へ切り替えることができますが,少しいじればいろいろなことができそうです.
もちろんここではしませんが,何らかのビューを返すこともできるはずです.