PHPでX-Powered-Byを出力させない方法|ほかに注意すべきヘッダ情報も解説

PHP PHP
主にPHPに関する記事

PHPやLaravelのアプリを公開する際、セキュリティ安全性は非常に重要です。 その中でもHTTPヘッダに自動追加されるX-Powered-Byは、アプリの実装技術を露呈してしまうため、攻撃者に目をつけられやすいリスクになります。

本記事では、PHPでX-Powered-Byを消す方法を解説し、その他にも注意すべきヘッダ情報とその対策を紹介します。


PHPでX-Powered-Byを削除する方法

php.iniで削除する

最も正統的で効果的な方法はphp.iniで削除することです。

; php.iniに追加または変更
expose_php = Off
  • expose_phpOffにすることで、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,
];

その他注意すべきヘッダ情報

次のようなヘッダも、出力を削減することを検討するとよいです。

ヘッダ名解説削除方法
ServerWebサーバの種類 (Apache、Nginxなど)Webサーバの設定で無効化
X-AspNet-VersionASP.NETのバージョン情報Web.configで削除
X-Powered-By (Laravel)Laravelでは手動削除が必要ミドルウェアで削除

まとめ

  • PHPのX-Powered-Byを消すにはphp.iniexpose_php = Offにする
  • php.ini変更不可の場合はheader_remove()やLaravelのミドルウェアを使う
  • Server情報もレベルで露呈しないよう配慮する

セキュリティ安全性は、小さなことの続けで大きく変わります。 小さなリスクを一つ一つ削除していきましょう。

コメント

タイトルとURLをコピーしました