2008年8月20日水曜日

[Java][Security]XSS対策

最近学んだ、XSS(クロスサイトスクリプティング)にたいする対策コードをまとめる。

XSSは動的にWEBページを生成するサイトの脆弱性を利用し、悪意あるスクリプトを混入させ、サイトを訪れたユーザに不利益となる操作を実行させるセキュリティ攻撃。

根本的な原因は、ユーザ入力に対するエスケープの未実施、または不適切なエスケープである。WEBアプリケーションにおいて、ユーザ入力をそのままHTMLに出力するようなロジックを使用していると、入力値に記述されたスクリプトが動作することを許容してしまう。

対策として、ユーザ入力を疑い、適切なエスケープを施すことが重要となる。

以下Javaにおける対策例。
public class HttpUtility {
    public static String escapeHTML(String str) {
        char c;
        StringBuffer returnStr = new StringBuffer();
        int length = str.length();
        for (int i = 0; i < length; i++) {
            c = str.charAt(i);
            if ( c == '<' ) {
                returnStr = returnStr.append("<");
            } else if ( c == '>' ) {
                returnStr = returnStr.append(">");
            } else if ( c == '&' ) {
                returnStr = returnStr.append("&");
            } else if ( c == '"' ) {
                returnStr = returnStr.append(""");
            } else {
                returnStr = returnStr.append(c);
            }
        }
        return new String(returnStr);
    }
}

以上です。

0 件のコメント:

コメントを投稿