一般公開するWEBサービスを作る場合、慣れてないと手がかかるのがセキュリティへの配慮です。

Google App Engineとか使っている時点でSQLインジェクションとかディレクトリ・トラバーサルとかOSコマンド・インジェクションとか関係ありませんが、セッションハイジャックとかアプリケーションの作りに依存する部分は他のフレームワークと同じです。

気をつけたいのがXSS(クロスサイト・スクリプティング)です。

HTMLタグ不許可な場合は簡単なんですが、昨今のWEBサービスではブログをはじめフォームにHTMLタグを入力できる様なサービスが増えてきたので大変です。

良い子のウェブプログラマはIPAのガイドライン、[一般公開するWEBサービスを作る場合、慣れてないと手がかかるのがセキュリティへの配慮です。

Google App Engineとか使っている時点でSQLインジェクションとかディレクトリ・トラバーサルとかOSコマンド・インジェクションとか関係ありませんが、セッションハイジャックとかアプリケーションの作りに依存する部分は他のフレームワークと同じです。

気をつけたいのがXSS(クロスサイト・スクリプティング)です。

HTMLタグ不許可な場合は簡単なんですが、昨今のWEBサービスではブログをはじめフォームにHTMLタグを入力できる様なサービスが増えてきたので大変です。

良い子のウェブプログラマはIPAのガイドライン、]1 を参考にします。

同ガイドラインでは根本解決策を「入力されたHTMLテキストから構文解析木を作成し、スクリプトを含まない必要な要素のみを抽出する」としています。

そんなもん自力で書いてられません。

そこで、OWASP(Open Web Application Security Project)謹製のAntiSamyを使いたいと思います。

 

 


ダウンロード

Google Codeから antisamy-bin.1.4.1.jar をダウンロードします。

設定はポリシーファイルで行います。テンプレが用意されていますのでダウンロードします。

ここを参考に、antisamy-ebay.xml をダウンロードしました。

 

 


インストール

基本的にjarファイルをクラスパスに置くだけ、の筈ですが、私の環境ではそれだけでは動きませんでした。(slim3 1.0.5、Eclipse 3.5、google app engine for java 1.3.6)

いろんなクラスが見つからないと怒られます。

先ほどのGoogle CodeでAll downloadsをSearch すると、antisamy-required-libs-1.2.zip が出てきます。こいつをダウンロードして解党し、依存性があるであろうjar達をクラスパスに置いたら動きました。

 

 


使い方

またもやここを参考にしてください。

一応書いときます。

import org.owasp.validator.html.AntiSamy;
import org.owasp.validator.html.CleanResults;
import org.owasp.validator.html.Policy;
import org.owasp.validator.html.PolicyException;
import org.owasp.validator.html.ScanException;
...
    public static final String PATH_ANTISAMY_POLICY = "WEB-INF/antisamy-ebay-1.4.1.xml";
...
    public static String doSamy(String str) 
        throws PolicyException, ScanException 
    {
        Policy policy = Policy.getInstance(PATH_ANTISAMY_POLICY);
        AntiSamy as = new AntiSamy();
        CleanResults cr = as.scan(str, policy);
        return cr.getCleanHTML();
    }
...

 

 


Youtubeを動かしたい

Youtubeのタグが弾かれる事に気がつきました。

一番なんでもアリのポリシーファイル(antisamy-anythinggoes-1.4.1.xml)に変えてもダメです。

色々ググっているウチに、先人の知恵を発見。

AntiSamy Policy to allow YouTube Videos

無事Youtubeも動くようになりました。

FireFoxのプラグインXSS MEでテストしてみましたが、機嫌よくサニタイズしている様に見えます。

満足です。