HTTP1.1、CGI1.1の継続行
日経BPのITproに、インジェクション系脆弱性への対策をテーマとして連載してきたが、本日無事に最終回を迎えることとなりました。
インジェクション系攻撃への防御の鉄則 | 日経 xTECH(クロステック)
多くの方に注目いただいたようで、大変嬉しく思います。ありがとうございました(_ _)
ここでは、編集部の判断でカットされた部分(マニアックすぎると判断された?)を拾い出して、紹介します。
HTTPヘッダ・インジェクション脆弱性が混入する根本的な原因は、HTTPにおいて特別な意味を持つ改行に対する処理がなされていないところにある。そこで、インジェクション系脆弱性の対策原則に従い、改行のエスケープ処理を検討してみよう。
HTTPにおける改行のエスケープ処理は可能である。あまり知られていないが、HTTPヘッダには、「継続行」という概念があり、改行の直後に空白あるいは水平タブが続く場合は、直前の行の継続とみなされる。しかしながら、「継続行」はCGI 1.1の仕様ではサポートされない ので、結局のところWebアプリケーションで利用できるものではない。RFC 3875
6.3. Response Header Fields
Note that each header field in a CGI-Response MUST be specified on a single line; CGI/1.1 does not support continuation lines.
私自身、HTTPレスポンス・ヘッダの継続行というものをこの連載を執筆するまで意識していなかったのですが、ちゃんとあるのですね(このあたりは水無月ばけらさんが詳しそうです)。
私が継続行を意識していなかった理由は、CGIでサポートされていないのでアプリケーションから利用できない(場合が多い)からですが、ではHTTPレスポンス・ヘッダの継続行って、どの程度使われているんでしょうね?
メールヘッダの継続行は、非常によく見かけますね。あて先とか長くなりますからね。HTTPではどうなんでしょうか?