PHPやLaravelのアプリを公開する際、セキュリティ安全性は非常に重要です。 その中でもHTTPヘッダに自動追加されるX-Powered-Byは、アプリの実装技術を露呈してしまうため、攻撃者に目をつけられやすいリスクになります。
本記事では、PHPでX-Powered-Byを消す方法を解説し、その他にも注意すべきヘッダ情報とその対策を紹介します。
PHPでX-Powered-Byを削除する方法
php.iniで削除する
最も正統的で効果的な方法はphp.iniで削除することです。
; php.iniに追加または変更
expose_php = Off
expose_phpをOffにすることで、PHPがHTTPヘッダに情報を追加しなくなります。
header()ファンクションで解決
php.iniを変更できない環境の場合、PHPスクリプトなどでは以下のようにします。
<?php
// X-Powered-Byヘッダを削除
header_remove('X-Powered-By');
// または全てのヘッダを削除してからレスポンスを付加
// header_remove();header_remove()を使うと、スクリプト内でのみ有効です。- より完全な対策とするならphp.iniと合わせて実施するのがよいです。
Laravelでの実施例
Laravelではミドルウェアで一括管理する方法があります。
<?php
// app/Http/Middleware/RemovePoweredByHeader.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class RemovePoweredByHeader
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$response->headers->remove('X-Powered-By');
return $response;
}
}これをapp/Http/Kernel.phpに追加します。
// app/Http/Kernel.php
protected $middleware = [
// その他のミドルウェア
\App\Http\Middleware\RemovePoweredByHeader::class,
];その他注意すべきヘッダ情報
次のようなヘッダも、出力を削減することを検討するとよいです。
| ヘッダ名 | 解説 | 削除方法 |
|---|---|---|
| Server | Webサーバの種類 (Apache、Nginxなど) | Webサーバの設定で無効化 |
| X-AspNet-Version | ASP.NETのバージョン情報 | Web.configで削除 |
| X-Powered-By (Laravel) | Laravelでは手動削除が必要 | ミドルウェアで削除 |
まとめ
- PHPの
X-Powered-Byを消すにはphp.iniでexpose_php = Offにする - php.ini変更不可の場合は
header_remove()やLaravelのミドルウェアを使う - Server情報もレベルで露呈しないよう配慮する
セキュリティ安全性は、小さなことの続けで大きく変わります。 小さなリスクを一つ一つ削除していきましょう。
