@634
634 - JavaScript - XSS(クロスサイトスクリプティング)

XSS(クロスサイトスクリプティング)

Advertisement

XSS(クロスサイトスクリプティング)

入力データをそのまま使用する部分がある場合、ページ内に任意のコードを埋め込み実行することができてしまう。さらにCGIなどにデータを引き渡している場合、任意のコマンドを実行することができてしまう。結果、他人のクッキー取得、データ破壊などの危険がある。これをクロスサイトスクリプティングと呼ぶ。JavaScriptである程度対策ができるため、その手法を紹介する。

実験

以下の普通のフォーム。
"><script>alert("テスト")</script>
などのコマンドが実行できる。
メールアドレス:

ローカル側での対策

メールアドレスの形式チェック(正規表現)
メールアドレス:
メールアドレスとして不適切な場合、警告。

JavaScript
function DataCheck(){
    if(form2.mail.value.match("^[0-9A-Za-z._]+@[0-9A-Za-z.]+$")){
        document.write(form2.mail.value);
        //return true;
    }else{
        alert("不正な形式\n" + form2.mail.value);
        return false;
    }
}

ローカル側での対策2

サニタイズ
メールアドレス:

入力文字列内のメタ文字を文字コードにエンコードする。
メタ文字文字コード
<&lt;
>&gt;
&&amp;
"&quot;
'&#39;

JavaScript
function MetaReplace(){
    var str = form3.mail.value;
    var comp="";
    var i = str.indexOf("&", 0);
    while (i > -1) {
        comp += str.substring(0, i + 1) + "amp;";
        str = str.substring(i + 1, str.length);
        i = str.indexOf("&", 0);
    }
    str = comp + str;

    while(str.indexOf("<", 0) > -1){
        str = str.replace(">", "&lt;");
    }
    while(str.indexOf(">", 0) > -1){
        str = str.replace(">", "&gt;");
    }
    while(str.indexOf('"', 0) > -1){
        str = str.replace('"', '&quot;');
    }
    while(str.indexOf('\'', 0) > -1){
        str = str.replace('\'', '&#39;');
    }

    return str;
}

ローカル側での対策

上記のようなローカル側での対策の場合、ブラウザのスクリプト実行機能を無効にすることで、容易に回避することが出来てしまう。

ローカル側でのチェックはユーザの入力ミスを防ぐために実行しておき、サーバ側でもチェックを行うことにより、悪意のあるコードを排除する必要がある。

Advertisement

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール