chromeだけmp4画像が再生できない。

 

事象
  • うちのサーバに入ってるmp4の画像が再生できない。
  • Chromeだけみれなくて他のブラウザでは正常に見れた
  • 容量をある程度減らすとChromeでも再生ができた
  • 同じ動画ファイルを他社のサーバにおいておくとChromeでも再生できた

なんでやねん?(この言葉使ってみたかった)

 

原因

脆弱性対応の一環で入れたHttpRangeの無効化設定をした。

ブラウザごとにRangeの範囲を指定する仕様が異なるので、ChromeだけHttpRangeの無効化設定に引っかかった

HttpRangeとは

RangeはHTTPのヘッダーのことで、クライアントがGETリクエストを送るときにデータの何バイト目から何バイト目までレスポンスで返してね、と指定するヘッダー

おもにファイルの分割ダウンロードや、ダウンロード中断・再開などで利用するヘッダで、ダウンロードを範囲指定

Dos攻撃を受ける脆弱性

先ほど説明したRangeヘッダーに、カンマ区切りで非常に多くの範囲指定が設定された場合に、Apache HTTPdサーバがサービス不能状態に陥ってしまう脆弱性があった

Rangeヘッダーの脆弱性対応するためいれた設定は以下の通り

RequestHeader unset Range 
RequestHeader unset Request-Range

この設定はmod_headersでRangeヘッダーを無効化する設定である

この設定を入れた時点で他社とうちのサーバのヘッダー情報を比較してみた

うちのサーバ
Accept-Ranges:bytes 
Connection:close 
Content-Length:3048623 
Content-Type:video/mp4

 

他社(俺のレンタルサーバ)
Accept-Ranges:bytes 
Connection:close 
Content-Length:3048591 
Content-Range:bytes 32-3048622/3048623 
Content-Type:video/mp4

うちのサーバにはContent-Range情報がないことがわかった

 

対策

脆弱性対応する方法はいくつかありその中で以下の設定にすることで解消ができた

RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$) [NC] 
RewriteRule .* - [F] 

RequestHeader unset Request-Range

 

 

いくつかの脆弱性対応方法

今回事件の発端になった「RangeHeader」の脆弱性は以下のようにいくつかの対応方法があった。

(1)「SetEnvIf」ディレクティブ(2.2系の場合)や「mod_rewrite」モジュール(2.2系より前のバージョンや1.3系)を使って不正なヘッダーやリクエストそのものを拒否する方法

(2)リクエストフィールドのサイズを200バイト程度に制限する方法

(3)「mod_headers」モジュールを使ってRangeヘッダーの使用を禁止する方法—などが挙げられている。これ以外にRangeヘッダーをカウントするモジュールの組み込みや非公式パッチを適用する方法なども存在する

 http://d.hatena.ne.jp/yamane2/20110906/1315524004

http://itpro.nikkeibp.co.jp/article/NEWS/20110831/367976/

http://www.hitachi.co.jp/hirt/publications/hirt-pub11005/

 

 

参考したページ:

http://d.hatena.ne.jp/monajiro/20100617/p1

http://bloodlinejp.ddo.jp/blog/?p=1295

カテゴリー: 未分類

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です