XSS(クロスサイトスクリプティング)AdvertisementXSS(クロスサイトスクリプティング)
入力データをそのまま使用する部分がある場合、ページ内に任意のコードを埋め込み実行することができてしまう。さらに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
サニタイズ
入力文字列内のメタ文字を文字コードにエンコードする。
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(">", "<");
}
while(str.indexOf(">", 0) > -1){
str = str.replace(">", ">");
}
while(str.indexOf('"', 0) > -1){
str = str.replace('"', '"');
}
while(str.indexOf('\'', 0) > -1){
str = str.replace('\'', ''');
}
return str;
}
ローカル側での対策
上記のようなローカル側での対策の場合、ブラウザのスクリプト実行機能を無効にすることで、容易に回避することが出来てしまう。
ローカル側でのチェックはユーザの入力ミスを防ぐために実行しておき、サーバ側でもチェックを行うことにより、悪意のあるコードを排除する必要がある。 AdvertisementAdvertisement |
ショートカット・634トップページ・このカテゴリのトップページに戻る ・634ラボ サイト検索Y!ログール |