SlideShare a Scribd company logo
セキュリティキャンプ中央大会2012
 webセキュリティコース成果発表

Webフレームワークの
   XSS対策の自動化
わく□(@kyubuns / @lmt_swallow)
目的

 Webフレームワーク側で基本的な
 XSS対策を自動的に行うようにして
 脆弱性のあるWebサイトを減らす
現在の問題点
• セキュリティに詳しくない人が脆弱性
 のあるサイトを簡単に作れてしまう。

• 文脈を見てエスケープする文字を変更
 する必要がある。

• 例えば、HTMLとJSでは別々のエス
  ケープ処理が必要。
今回やったこと


• それぞれが別々のフレームワークに
 自動でXSS対策をしてくれるライブラリ
 を作成した。
特徴

•   文脈に応じて正しいエスケープが自動的に行
    われる。

    •   例えばHTMLとJSでは違うエスケープ処理が必要。

•   フレームワーク自体のコードは変更しない。

•   稼働中のコードに少ない変更で導入できる。
WebフレームワークXSS対策の自動化
WebフレームワークXSS対策の自動化
WebフレームワークXSS対策の自動化
テンプレート:14行
Pythonという言語:15行
たった30行で作れる!
けどそのまま表示してるので危ない。
ふぁぼめ
(Python+Flask用のXSS対策自動化ライブラリ)
実装
• 外部から入力された値は通常の文字列型では
 なく独自の型として扱う。

• 通常の文字列型との比較演算子を定義して
 おくことで、いつも通り使える。

• 文字列にキャストする時に自動でエスケー
 プが走る。
実装


• Flaskに渡す前にテンプレートを解析し
 て、必要なエスケープ処理をテンプ
 レートに埋め込む。
導入手順
•   テンプレート自体はそのまま使える。

•   テンプレートの読み込みクラスを
    EnvironmentからFavEnvironmentに変更。

•   入力の取得を
     before: request.values.get(“name”) #返り値はstring
     after:   favreq(“name”)     #返り値はUserInputString
    に変更。
SanitizeController
(PHP+CakePHP用のXSS対策自動化ライブラリ)
App::import(“Controller”,”Sanitize”);


class TestController extend SanitizeController
{
   public function index()
   {
     //WARNING!!!!
     $ts = “<script>alert(1)</script>”;
     $this->set(“test”,$ts);
   }
}
diff

<  App::import("Controller","Sanitize");

>      class TesterController extends AppController
<      class TesterController extends SanitizeController
実装

• 実装自体は継承元のControllerクラスの
  setメソッドをオーバーライドしてるだ
  け。

• 継承するControllerをSanitizeControllerに
  変更するだけで使える。
今後の課題


• まだ対応出来ていない脆弱性があるの
 で対応したい。

More Related Content

WebフレームワークXSS対策の自動化