Laravel 5 で入力パラメータ値の文字エンコーディングをチェックするMiddlewareを追加する
※当サイトにはプロモーションが含まれています。
公開日:
更新日:

Laravel
セキュリティのリスクを少しでも減らすために、想定している文字エンコーディング以外の文字がパラメータとして送信されても受け付けないようにします。
1.以下のミドルウェアを作成する
app/Http/Middleware/EncodingValidateParams.php として、パラメータ値の文字エンコーディングをチェックするミドルウェアを新規に作成します。
<?php namespace App\Http\Middleware;
use Closure;
class EncodingValidateParams
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
foreach ($request->all() as $val) {
if (! $this->isValidEncoding($val)) {
abort(400, 'Bad Request');
}
}
return $next($request);
}
/**
* @param string $val
* @return bool
*/
private function isValidEncoding($val)
{
if (mb_check_encoding($val, mb_internal_encoding())) {
return true;
}
return false;
}
}
※ ホントは、mb_internal_encoding() は書かなくてもいいはずです。分かりやすくするために書いてあります。
2. グローバルなミドルウェアとして登録する
Global Middleware として利用するために、app/Http/Kernel.php の $middleware 配列に、'App\Http\Middleware\EncodingValidateParams', を追加します。
<?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 = [
// :
'App\Http\Middleware\EncodingValidateParams',
];
// 省略
}
以上です。
こっちにもまとめておきました。→ Laravel 5 でのセキュリティ対策 (PHP) - Secure Code Tips
参考
最終更新日: 2015-5-13