XSS
Cross Site Scripting
クロスサイト、と言うよりは、Cross Originと言ったほうがわかりやすい
本来、Same-Origin Policyがあるため、Cross-Siteからのscriptは実行できないが、
脆弱性がある場合、Same-Origin内で任意のscriptの実行を可能にしてしまう
分類
攻撃者が仕込んだscriptを、被害者のブラウザ上で実行する
攻撃者がscriptをどこに仕込むかで、XSSの分類がなされる
具体例は各ページに書く
3種類ある
Reflected XSS
Stored XSS
DOM Based XSS
XSS体験サイト
XSS攻撃体験サイト
イメージが湧く
チートシート
https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
ちょっと古いらしい
#WIP
脅威
偽情報の表示
JSを使って、偽の情報をHTML上に表示できる
フィッシング
JSを使って、偽のformを表示させ、ユーザーのプライベート情報を登録させ搾取できる
強制的なWebアプリケーションの操作
JSによって、強制的に画面上のページ遷移や操作を攻撃者が行える
Session IDの漏洩
XSSすればCookie内のSession IDを知らずとも攻撃できる
機密情報の漏洩
JSからHTMLを読み取れるため、攻撃者はHTML内に含まれる氏名や住所などのユーザーの機密情報を盗み見ることができる
例えばユーザーがgmailのページを見ていれば、メールの内容を全て見れる
https://gihyo.jp/dev/serial/01/javascript-security/0002
サイト制作者の対策
escape
table:escape
& &
< $lt;
&gt;
" &quot;
' &#x27;
徳丸本 第2版 p.133~
https://speakerdeck.com/masashi/number-frontkansai-2019?slide=31
Same-Origin Policy
Trusted Types
Content Security Policy (CSP)の導入
https://developer.cybozu.io/hc/ja/articles/201850320-JavaScriptでセキュアなコーディングをするために気をつけること
信頼できない外部サイトからデータを取得しない
JavaScriptコードを動的に生成しない
これがだめな理由をもう少し詳しく知りたい #??
自分ではこういう書き方はしないけど、最近見かけたmrsekut.icon
JSONのパースにはJSON.parse()を使う
URLのEncodeにはencodeURIComponent()を使う
ユーザーに関係する情報をcookieやlocalStorageに保存しない
サードパーティライブラリは常に最新版を利用する
同期XMLHttpRequestはなるべく使わない
『Webブラウザセキュリティ』 pp.53-54
アプリケーションごとにOriginを分ける
sandbox domainを使う
これググっても出てこないmrsekut.icon
.googleusercontent.com
サイト訪問者の対策
我々は常日頃からその辺のサイトにアクセスしまくっているが、
その時に我々が被害を被らないためにできることはないのか?
上のリンクに書いている具体例を見れば分かる通り、
「怪しいサイトにアクセスしない」や「(非現実的だが)JSを無効にする」をしていても、そのサイトに脆弱性があれば回避不能っぽい
あるとすれば、ブラウザでログイン状態を保たない、とかになるのかmrsekut.icon
XSS仕込まれたページを見ていると時に、元のサイトにログイン状態になっていなければ回避できる
参考
徳丸本 第2版 p.120~
かなりのページ量が割かれて解説されている
具体例もある
未読箇所も多いmrsekut.icon
フロントエンドエンジニアのためのセキュリティ対策 ~XSS編~
実際の事例や、被害者数のデータなど
https://speakerdeck.com/mala/line-dm-16-20160916-how-to-find-and-fix-xss
https://speakerdeck.com/mala/shibuya-dot-xss-techtalk-number-8
https://gihyo.jp/dev/serial/01/javascript-security/0002
https://blog.tokumaru.org/2012/04/javascript-xss-to-learn-from-ipa.html
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a01_02.html
https://blog.ohgaki.net/javascript-injection-risky-functions-and-features
https://www.codegrid.net/articles/frontend-security-1/
具体例が多い
https://speakerdeck.com/mala/seccon2013-slide
https://zenn.dev/ooooooo_q/articles/zenn_and_markdown_it
https://ja.wikipedia.org/wiki/クロスサイトスクリプティング
https://qiita.com/t_nakayama0714/items/16f987742e8e3ee48ffd
xssの入力値の具体例
https://techblog.securesky-tech.com/entry/20220308/
https://blog.flatt.tech/entry/xss_risk
@orange_8361: Me: Making slides takes time
Also Me: Spend all day making memes
https://gyazo.com/0f9841e7f8bd6081e8db0f6fd6e37b09