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で応答したりすることがありますが、さすがにそれはちょっと……。
- 「不正データによる終了時のステータスコードで悩む」へのコメント (11件)
- 前(古い): 2008年4月9日(Wednesday)のえび日記
- 次(新しい): 2008年4月17日(Thursday)のえび日記