プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • セキュリティ
  • 【Webセキュリティ】XSS(クロスサイトスクリプティング)対策の基本(JavaやRail…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Webセキュリティ】XSS(クロスサイトスクリプティング)対策の基本(JavaやRails、breakmanなど)

04.01

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

有名な脆弱性として、XSS(クロスサイトスクリプティング)があると思いますが、基本的な知識をまとめます。

XSSとは?

ユーザーに表示するコンテンツに悪意のあるスクリプト(主にJavaScript)を仕掛けて、そのコンテンツを表示したユーザーにスクリプトを実行させることで任意操作を行わせる攻撃です。

XSSのメカニズム

ブラウザは基本的にJavaScriptの悪用を防ぐため「同一オリジンポリシー」という制限を設けています。この制限の元ではあるオリジンから他のオリジンへのAjax通信をすることができなくなります。ただ、XSSは第三者の同一オリジンに成り済まして悪意ある操作を行おうとします。

オリジンとは?

プロトコル、ホスト、ポートの組み合わせのことです。

XSSの影響、被害

  • ブラウザ上で攻撃者が用意したJavaScriptの実行によりクッキー情報を盗まれ成りすまされてしまう。
  • Webサイト上に偽の入力フォームが表示されてフィッシングにより個人情報が盗まれる。

発生箇所

  • アプリケーションで、HTMLタグを生成している箇所
  • アプリケーションで、JavaScriptを生成している箇所

例えば、対策がされていないページでは、JavaScriptで簡単にクッキーの情報を表示させることができます。

対策の基本

Webアプリの開発者ができる対策

・属性値はダブルコーテーション(")で囲むこと。

・下記のHTMLの5種類の特殊文字を使う場合は、エスケープ(サニタイジング)すること。

「<」「>」「&」「"」「'」

実際に、下記の記事で、XSSの攻撃と対策をやってみているサンプルがありますので、実施してみて下さい。

【Webセキュリティ】Javaサーブレットで、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」のことを指しており出力される情報メッセージを抑制できます。

スポンサーリンク
  • 2018 04.01
  • miyabisan2
  • コメントを書く
  • Ruby on Rails, セキュリティ
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 06.19

    【Ruby on Rails】YAMLの基本と、データベースの接続設定をするには?

  2. 2019 12.01

    【Rspec】System Spec(システムスペック)の基本

  3. 2019 11.23

    【Ruby on Rails】アプリケーションサーバ「Puma」、「Unicorn」について

  4. 2019 12.07

    【Ruby on Rails】「ページング」の実装(kaminari)

  5. 2019 12.08

    【Ruby on Rails】「Turbolinks」によるページ遷移高速化

  6. 2020 12.19

    【Ruby on Rails】モデルの基本、データ型、scope、メソッド(クラス、インスタンス)の違い、委譲

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Webセキュリティ】ログイン認証の種類について

【Javaサーブレット】セッション管理について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー