1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsで学ぶXSS脆弱性

Posted at

webセキュリティについて勉強中なので、学習内容を公開します
スカスカ記事ですがお許しください

#演習環境

  • Ubuntu 18.04.4
  • Ruby (2.6.6)
  • Rails (5.2.4.3)
    • database adapter mysql2 (0.5.3)
  • mysql (5.7.30)

記事投稿、コメント投稿、ブックマークなどが出来る演習用アプリ「TARGET」
GitHubリポジトリ https://github.com/Fumitaka1/target

#XSS脆弱性とは
XSSには反射型、持続型、DOMベースの3タイプに分類され、単にXSSというと反射型XSSを指すことが多いようです。

上記の3タイプに共通する性質として「外部からのパラメータを用いてwebページを出力しているアプリケーションにおいて、任意のhtml要素や属性が挿入出来てしまう」所がXSS脆弱性の肝です。

挿入されたスクリプトによってセッションや入力データが流出したり、有害な操作やリダイレクトが可能になるなど多くの被害が発生します。

例 演習用アプリでは投稿にコメントする機能があります
正規のコメント.png

スクリプトタグを含む不正なコメントを投稿すると、ブラウザはスクリプトタグとして解釈します。
悪意のコメント.png
攻撃成功.png
演習用アプリではRailsの機能によりcookieのHttponly属性が付与されているので、Javascriptでセッションを取得することはできません。
しかし任意のページにリダイレクトしたり、不正なフォームをもとのページに重ねて表示することが出来ます。

#なぜ発生するのか
上記の例では外部からのパラメータを用いてHTML要素内容を出力する際に、特殊文字[" ' & < >]をエスケープしていないことが原因。
等号記号が2つのERB式<%== @comment.content %>で意図的にエスケープを回避している。

XSS脆弱性が発生しうる箇所には①HTML属性値②HTML要素内容③リンク④イベントハンドラなどがあり、それぞれエスケープの方法が異なるので場所にあったエスケープを行う必要がある。
各々のエスケープ方法については後日記事にします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?