水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2008年のえび日記 > 2008年4月 > 2008年4月14日(月曜日)

2008年4月14日(月曜日)

不正データによる終了時のステータスコードで悩む

なぜPHPアプリにセキュリティホールが多いのか?【スクリプトインジェクション対策07】予期しないエラーが発生した場合,プログラムの実行を停止する (gihyo.jp)」。

「プログラムの実行を停止」というのは表現がおかしいと思いますが、要は処理を続行せずにエラー終了すべきということですね。

しかしこういうときに悩むのが、「どういうステータスコードで応答したら良いのか」ということ。普通に考えると500系のレスポンスになると思うのですが、501 (Not Implemented) では変ですし、503 (Service Unavailable) だと一定期間後に復活しそうに見えますし、他に使えそうなコードはないし……。というわけで、まあ素直に500 (Internal Server Error) で良いかなぁ……と思うわけですが。

ところがついこの前、とある案件にて、セキュリティ屋さんから「500応答はダメ」と言われて大ショック。「スタックトレースが表示されているからダメ」というのなら分かるのですが、その手の情報を何も出力していなくても、ステータスコード500が返っているだけでダメらしいのです。

そうなると400系? ……400系であえて挙げるなら403のような気がしますが、ものすごい違和感があります。

※社内ではその後「じゃあ 402 で」という意見が出たので、対抗して「いや、418 で」と言っておきましたが。

一般的にはこういうとき、どうしているのでしょう? 個人制作のフリーのCGIプログラムのようなものだと、エラー時でも200で応答したりすることがありますが、さすがにそれはちょっと……。

関連する話題: セキュリティ / HTTP

最近の日記

関わった本など