有名な脆弱性として、XSS(クロスサイトスクリプティング)があると思いますが、基本的な知識をまとめます。
XSSとは?
ユーザーに表示するコンテンツに悪意のあるスクリプト(主にJavaScript)を仕掛けて、そのコンテンツを表示したユーザーにスクリプトを実行させることで任意操作を行わせる攻撃です。
XSSのメカニズム
ブラウザは基本的にJavaScriptの悪用を防ぐため「同一オリジンポリシー」という制限を設けています。この制限の元ではあるオリジンから他のオリジンへのAjax通信をすることができなくなります。ただ、XSSは第三者の同一オリジンに成り済まして悪意ある操作を行おうとします。
オリジンとは?
プロトコル、ホスト、ポートの組み合わせのことです。
XSSの影響、被害
- ブラウザ上で攻撃者が用意したJavaScriptの実行によりクッキー情報を盗まれ成りすまされてしまう。
- Webサイト上に偽の入力フォームが表示されてフィッシングにより個人情報が盗まれる。
発生箇所
- アプリケーションで、HTMLタグを生成している箇所
- アプリケーションで、JavaScriptを生成している箇所
例えば、対策がされていないページでは、JavaScriptで簡単にクッキーの情報を表示させることができます。
対策の基本
Webアプリの開発者ができる対策
・属性値はダブルコーテーション(")で囲むこと。
・下記のHTMLの5種類の特殊文字を使う場合は、エスケープ(サニタイジング)すること。
実際に、下記の記事で、XSSの攻撃と対策をやってみているサンプルがありますので、実施してみて下さい。
Railsでの対策
Railsではデフォルトでエスケープされる仕様になっています。ただ、上記の文字を全てエスケープしたいかといえばそうでもない場合もあるかと思いますので、下記のようなヘルパーを使ってエスケープをスキップさせます。
- rawヘルパー
- String#html_safe
また、Slimでは「==」で値を展開した場合はHTMLエスケープされません。
逆に、ある程度そのまま出したいが危険なタグを出力しないようにしたい場合は危険なタグにだけ「sanitizeヘルパー」を使います。
breakmanとは?
セキュリティに重点を置いたRailsプロジェクトの静的解析ツールです。XSS系の脆弱性の検知に役立ちます。
インストール
下記のように追加します。
1 2 3 |
group :development, :test do gem 'brakeman', '~> 4.7.2', require: false end |
実行
チェックしたいアプリがあるディレクトリにおいて下記コマンドを実行するだけです。
1 |
bundle exec breakman |
用途
CI/CDのチェックツールの一つとして使われていたりします。
オプション
-q
「quiet」のことを指しており出力される情報メッセージを抑制できます。
この記事へのコメントはありません。