PHP拡張子をhtmlファイル偽装でダウンロードされる。

らら
らら

はじめに

とあるパッケージソフトをインストール時に・・

拡張子.htmlでphpを動かすようにするって・・

下記を追加という指示が・・拡張子偽装ですね。はい。


AddType application/x-httpd-php .html

作業

なにも考えず・・指示通りやってみると、htmlファイルがダウンロードされるではないですかぁ。

ぐぐぐ・・・

考えてみると・・

まぁ。冷静に考えてみると、最近のPHPはインストール時PHP-FPMでインストールされているので・・

レンタルサーバーとかだとCGI版でインストールされている場合があるので、そのあたりの判断が必要ですね。

自分がどの環境か判断するには、phpinfoなど使って・・

下記の部分のところで判断できるかと

Server API FPM/FastCGI

/etc/httpd/conf.d/php.confを見てみると・・・(php|phar)とあるのでhtmlを追加


# Redirect to local php-fpm if mod_php (5 or 7) is not available
<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <IfModule !mod_php.c>
      # Enable http authorization headers
      SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
      <FilesMatch \.(php|phar)$>
          SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
      </FilesMatch>
    </IfModule>
  </IfModule>
</IfModule>

下記に変更


<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    <IfModule !mod_php.c>
      # Enable http authorization headers
      SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
      <FilesMatch \.(php|phar|html)$>
          SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
      </FilesMatch>
    </IfModule>
  </IfModule>
</IfModule>

↑だけ変更したら・・ふつうのhtmlがAccess denied.に・・・・

ぐぐってみたら、下記の設定も必要な感じ・・

/etc/php-fpm.d/www.conf


;security.limit_extensions = .php .php3 .php4 .php5 .php7

コメント外して、余分な拡張子は。いらないので下記で...


security.limit_extensions = .php .html

httpdとphp-fpmを再起動

systemctl restart php-fpm

systemctl restart httpd

まとめると・・

こんな感じ・・

PHPモジュール版・CGI版

htaccessとかに


AddType application/x-httpd-php .html

FastCGIモジュール版

/etc/httpd/conf.d/php.conf


      <FilesMatch \.(php|phar|html)$>

/etc/php-fpm.d/www.conf


security.limit_extensions = .php .html

まとめ

うーむ。このままだと、サイト全体の設定になってしまうぅぅ・・・

AddTypeだと、htaccessで特定フォルダーだけみたいに簡易にできますが・・

両設定ですが、静的HTMLもPHPで動作してしまうので注意が必要です。

あと、設定後、CMSなどアップロード機能がある場合、htmlファイルのアップロード禁止などの見直しが必要ですね。

PHPの場合、パーミッション等変更しなくても、アップロードするだけ動作してしまうので注意が必要です。

関連記事