FuelPHPの本番環境で忘れがちな設定

FuelPHP

PHPでなんか開発するときは、とりあえずFuelPHPが最有力候補になるもとやんです。
本番にデプロイするときは、環境変数でenvironmentをproductionに設定すればconfigファイルを適切に読み込んでくれるのでそれは良いんですけど、他にも少し気を付けておきたい点があるのです。

まずはpublicフォルダ内のindex.phpから二箇所

1.エラー吐き出すのを止める問題

ファイルの最初の方の箇所です。

/**
 * Set error reporting and display errors settings.  You will want to change these when in production.
 */
error_reporting(-1);
ini_set('display_errors', 1);

まぁ見ての通りです。攻撃のヒントになるので本番環境ではエラーを吐くのを止めておいたほうが無難でしょう。

2.プロファイラが有効になりっぱなし問題

ファイルの最後の方のこの部分です。

// This will add the execution time and memory usage to the output.
// Comment this out if you don't use it.
if (strpos($response->body(), '{exec_time}') !== false or strpos($response->body(), '{mem_usage}') !== false)
{
	$bm = Profiler::app_total();
	$response->body(
		str_replace(
			array('{exec_time}', '{mem_usage}'),
			array(round($bm[0], 4), round($bm[1] / pow(1024, 2), 3)),
			$response->body()
		)
	);
}

これも個人的には止めておきたい機能。レスポンスのbodyに対して置換をかけているのでユーザ入力だろうがなんだろうがお構いなしに置換します。
処理時間やメモリ利用量なんて正直バレても痛い数字ではないので、多分こういう実装になっているんだとは思いますが、開発がFuelPHPであることがバレるヒントには十分なります。
標的型攻撃を受けることを考えるとできれば削っておきたい(なお、こういう実装の不明確さに基づくセキュリティ確保は本来望ましいことではありません)。

if (Fuel::$env !== Fuel::PRODUCTION)
{
	/*.. 該当部分のコード ..*/
}

こういうコードになっている方が個人的には良いと思うんですが、バグってわけじゃないしなー。
既存コードの挙動が変わるからPullReqだすのもためらわれる。ちょっと話は変わりますが、FuelPHPの後方互換性は素晴らしいと思います。今のところフレームワークのバージョンアップで困ったことがありません。変更無しで動きまくります。私がViewModel使わない派って言うのも大きかった気がしますけど。

3.favicon.icoでFuelPHPバレする問題

meta tagでshortcut iconを設定し、publicフォルダ内のfavicon.icoが放置されている場合。これもFuelPHPであることがバレます。
例えばHTMLのソースコードを読まれた時とか。

具体例を上げると、クラウドバンクってサービスのウェブサイトがそうでした。
今見たらどうも修正されてるっぽいけれど、以前ソースをちらっとchromeで開いた時は、ソースを開いているタブのfaviconがFuelのアレだったので、「あー、publicフォルダにfavicon残ってるなー。ってかFuelで作ってるのかー」とか勝手に思っていました。

コメント

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