Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Webセキュリティ入門(xss)

487 views

Published on

Webセキュリティ入門(XSS)

Othlotech #11
https://othlotech.connpass.com/event/52273/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Webセキュリティ入門(xss)

  1. 1. じこしょーかい •影白 @KageShiron •主にC#、Web、セキュリティ関係 をやってるフレンズ •セキュリティキャンプ2016 全国大会 参加してきました
  2. 2. WEBセキュリティ入門
  3. 3. Do you know XSS Cross Site Scripting || 悪意のあるスクリプトを埋め込む攻撃
  4. 4. 持続型/蓄積型XSS •サーバーに書き込まれてほかのユーザーもス クリプトを実行してしまう •例:掲示板、コメント欄etc… •イメージ http://codepen.io/anon/pen/dvKzGa
  5. 5. 反射型XSS •HTTPリクエストに含まれる攻撃コードが 実行されてしまうタイプ •URLに埋め込むのが一番ポピュラー •サンプル(ほかの方のを借用) http://bogus.jp/xsssample/xsssample_01.php
  6. 6. 反射型XSS もっともシンプルなタイプ。 「〇〇の検索結果」のような 表示をしているサイトは多い ダブルクォーテーションの中で油断するタイプ [次のページ]ボタンのhref属性とかでも 入力されたURLが出現することはおおい
  7. 7. (余談)反射型XSS •XSSフィルタ • さっきのページで赤くなっていたところ •ブラウザが反射型XSSっぽいものを防いでくれる •バイパスして攻撃する方法は山のようにあるのでた よってはいけない • いたずらぐらいは防げるかな? •参考 http://masatokinugawa.l0.cm/
  8. 8. DOM Based XSS •主にjavascript側に原因があるXSS攻撃 •http://codepen.io/anon/pen/dvKzGa •さっきの奴は正しくはDOM Based XSSに分類 されるものでした •jQueryやinnerHTMLを操作する際に適切な処 理を行わないことによってスクリプトを埋め 込んでしまう。
  9. 9. XSSによる被害 •サイトを改ざんされる •偽コンテンツの表示 •偽フォームを使い、パスワードやクレ ジットカード情報の盗難 •ウイルスをダウンロードさせるようなサ イトへ誘導 •ワームの拡散
  10. 10. XSSによる被害 •ログインしていないとできないような操 作をされる •Cookie・セッションを盗まれる •情報の漏えい •勝手に本人として投稿 •データの削除
  11. 11. 回避策
  12. 12. ①徹底的にエスケープ • サーバー側では必ず専用関数が用意されているのでこれを使う • PHP : htmlspecialchars • Rails : escape • Rails3以降は<%= ~ %>では勝手にエスケープされる <script>alert("xss")</sc ript> &lt;script&gt;alert(&quot;xss&quot;)&lt;/script &gt; =&gt; & “ ‘ < > の5文字を文字実体参照に変換
  13. 13. ②ユーザーからの入力に警戒 •あらゆるリクエストの内容 •リクエストの本文、パラメータCookie、User-Agent •あらゆるユーザーが入力可能な箇所 •ユーザー名、メールアドレス、URL…
  14. 14. ③そもそも危険なことをしない • ×element.innerHTML = "~" • 〇element.textContent = "~" • ×$("body").html("~") • 〇$("body").text("~") • React.jsやAngularはエスケー プしてくれる・・・はず *** Rails *** •Rawメソッド • <%= raw “~" %> •==ヘルパー • <%== “~" %> •html_safe • <%= “~“.html_safe %>
  15. 15. ④適切にバリデーションする •一部の安全なタグのみ入力可能にしたい・・・ •安全なURLかどうかを正規表現で判定したい・・・ マウスオーバーで発動 <a onmouseover="~ 画像のonerror属性 <img onerror="~ パーセントエンコード %EF%BC%9Cscript%EF%BC%9Ealert(123)%E F%BC%9C/script%EF%BC%9Eiframe+base64 <iframe src='data:text/html;base64,PHNjcmlwdD5hb GVydCgnWFNTJyk8L3NjcmlwdD4='></iframe > svgに埋め込み <svg><script >~ 文字コードの誤判定を利用 dataURL data:text/html,<script>alert(0)</script> コメントに正規のURL javascript:alert('XSS');//http://bitarts.jp/ ポート番号 http://example.com:8080/ #や?の後ろに正規のURL http://unsafe_.com#http://example.com @を利用 http://example.com@unsafe__.com/ Unicodeの特殊文字
  16. 16. •GemやPEARを利用する •ReactやAngularなどに任せる •バリデーションに失敗しても 大丈夫な対策をする •無理しすぎない・・・ ⑤自分でプログラムを書かない
  17. 17. セキュリティを 意識して楽しく Web開発!

×