9月 182011
 
シェアする

 

Apacheの脆弱性が発表されてから、2.2.20未満のバージョンを利用されている人は、Rangeヘッダーの数を制限する設定をしたり、またはプロバイダ側でそのような設定を追加して対応した方もいると思う。

しかし、Rangeヘッダーの数を制限してしまいますと、PDFファイルや動画ファイルを参照する場合にファイルが正しく見れずに正常なアクセスがForbiddenされてしまうことがあります

その場合は、拒否する基準のRangeヘッダーの数を増やしてあげます

以下のような設定がされていると思いますので、赤字部分を変更してください。
Apacheのオフィシャルページでも、RangeヘッダーがPDFファイルや動画配信に影響を与える可能性があることと、数十程度までであれば何ら問題ないと書いていますので、今回は90にしてみましょう

Several 10’s should not be an issue and may be required for sites which for example
serve PDFs to very high end eReaders or use things such complex http based video streaming.
http://httpd.apache.org/security/CVE-2011-3192.txt

# Reject request when more than 5 ranges in the Range: header.
# CVE-2011-3192
#
RewriteEngine on
RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,89}$|^$) [NC]
RewriteRule .* - [F]

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
#
RequestHeader unset Request-Range

 

なぜ、90じゃなくて89なのか

簡単にポイントだけ。
以下の一行が制限(Fobidden)するか否かの判断材料となってます。

RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,89}$|^$)

意味を説明しておきます。

!=否定、~でない。
^=行頭
[^*]=*以外の文字全て、この場合「,」以外
+=直前の文字の1回以上のくり返し
数字a,数字b}=直前の物の数字a以上数字b以下の繰り返し
$=行末
|=OR

つまり、「(^bytes=[^,]+(,[^,]+){0,89}$|^$)」という条件に一致しない(否定:!)場合に限りForbiddenになるという設定になっている。

(^bytes=[^,]+(,[^,]+){0,89}$|^$) を上記の説明を参考に解読すると

行頭から「bytes=」とまずはじまり
「,」以外の文字(たとえば「123」)を使った文字が
「1回以上くりかえし」ます。
# ^bytes=[^,]+ まで

その後に
,「,」以外の文字一回以上の繰り返し
0回以上89回以下繰り返し行末になるもの
# (,[^,]+){0,89}$の部分

または何もない(行頭から行末まで何も記載がない)ものという意味になっています。

 

「!(^bytes=[^,]+(,[^,]+){0,4}$|^$)」という条件の場合。
以下のRangeヘッダーは「bytes=***」に続いて「,***」が5つあります。
「bytes=***」に続いて「,***」が4つ以下という条件に一致しない(!)ので、ルールは有効になります。

bytes=***,***,***,***,***,*** 

 

Rangeヘッダーを沢山よこすクライアントを弾く設定が今回のApacheの脆弱性対応のポイント。
しかし、この値が小さいとPDFファイルなどの参照時にRangeヘッダーが増えてしまい、結果Forbiddenになってしまうという問題があったので、この記事を書いてみました。

やっぱり、2.2.20に上げるのが最善策ですね。

以上

このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ