Skip to content

Instantly share code, notes, and snippets.

@sakunyo
Last active April 2, 2016 09:11
Show Gist options
  • Save sakunyo/af765839ecc11a04f292daaf921c8e1b to your computer and use it in GitHub Desktop.
Save sakunyo/af765839ecc11a04f292daaf921c8e1b to your computer and use it in GitHub Desktop.

XSSってなんぞや? for 初心者

XSS (Cross Site Scripting) 略称はCSSになりますがCSS(スタイルシート)と名称が一緒の ためにXSSと表記されています。 いわゆるWebページに悪意のあるコードを埋め込むことの総称です。

普通はサーバーサイドでRubyやPHPなどの言語でHTML(CSSやJSなど)の出力が、 外部から制御できるセキュリティーホールがあることが問題です。

XSSはフロントエンドでも対策が必要なことが多く、 信頼のないサービスなどから読み込むJSONやXMLなどをAjaxで取得する場合にもちろん注意が必要です。

特にjQueryを利用していても防げる問題ではないので、問題になる箇所分かりづらく発見しづらい事が特徴です。

<h2>画像ギャラリー</h2>
<div class="test"></div>

<script>
// 悪意のあるコード
var evil = '320/240" onload="$(\'h2\').text(\'乗っ取り成功\');';

// 画像サイズを任意に指定するつもりのコードが悪意のあるコードによって埋め込まれる
$(".test").append('<img src="http://placekitten.com/g/' + evil + '" alt="">');
</script>

上記の場合には、画像サイズを指定する変数 evil 数値の後の " ダブルクォートを置くことで、 スクリプトの埋め込みが可能にります。

<img src="http://placekitten.com/g/320/240" alt="">

が img要素に onload が埋め込まれたHTMLに改変されてしまいました。

<img src="http://placekitten.com/g/320/240" onload="$('h2').text('乗っ取り成功');" alt="">

このようなXSSは、仮に見つかった場合にはクッキーの情報が盗まれるなどの被害が発生します。

気をつけよう。XSS。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment