1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

デフォルトで対応!?Ruby on Railsの主なセキュリティ対策を知る

情報キュリティ
Pocket

Webアプリケーションを作る上で、情報セキュリティは非常に重要な課題の一つです。プログラミング初心者からすると、そんなところまで手が回らないと考えてしまいますが、アプリケーションに脆弱性があると、開発者だけでなくユーザーも深刻な被害を被る可能性があるため、いかなる開発者も情報セキュリティから目を逸らすことはできません。しかし、幸いRuby on Railsは、主なセキュリティ対策はデフォルトで行われています。とはいえ、Webアプリケーションにどのような脆弱性が潜んでいて、Railsでどのように対策を行っているかを知っていて損はありません。是非この機会に、情報セキュリティに関する知識を深めておきましょう!

情報セキュリティとは

情報セキリティの目的は、アクセスを認められた人が情報資産にアクセスすることができ、且つ不正なアクセスを防ぐことにあります。ここでいう情報セキュリティは、機密性(Confidentiality)、完全性(Integrity)、可用性(Availability)という3つの性質から成り立ちます。それぞれ、機密性(Confidentiality)とは、不正なアクセスを防ぐこと、完全性(Integrity)とは、情報資産が不正に書き換え・消去されないようにして正確性を保つこと、可用性(Availability)とは、アクセスを認められた人が必要な時に情報資産にアクセスできるようにすることを意味しています。

4つの代表的な脆弱性

今回は、クロスサイトスクリプティング(XSS)、SQLインジェクション、クロスサイトリクエストフォージェリ(CSRF)、セッションハイジャックというWebアプリケーションに潜む4つの代表的に脆弱性と、それに対してRailsがどのような対策を行っているかを解説していきます。

クロスサイトスクリプティング(XSS)

XSSは、メッセージ投稿やコメント記入など、ユーザーがデータ入力を行うページにある脆弱性です。外部の攻撃者によってWebアプリケーションにスクリプトを埋め込まれることによって、cookieの盗み出し、偽サイトへのリダイレクト、ソフトウェア感染、不正な広告表示など様々な攻撃を受ける可能性があります。

これを防ぐには、フォームで「<」「>」「?」などHTMLタグとして意味のある文字が入力された際に、それぞれ「<」「>」「&」にエスケープさせることが必要になります。

RailsではXSSへの対策がデフォルトで済んでいます。erbファイルでは表示の際に<%= %>というタグを用いますが、これを利用すると裏側で文字列の変換が自動的に行われるような仕組みになっています。もし意図的にエスケープを外す際にはrawメソッドを用います。

SQLインジェクション

SQLインジェクションは、データベース情報へのアクセス、データの書き換え、不正な認証などの被害につながる脆弱性です。ユーザー入力欄に入力されたデータがSQL文の一部として解釈されることによって、本来アプリケーションで想定していないSQL文が実行されてしまいます。

先ほど説明したHTMLタグのエスケープ同様、SQLもエスケープする必要があります。また、ユーザー入力欄をSQL文のパラメータにして実行する場合は、プレースホルダーを用います。

幸い、Railsでアプリケーションを作る際には、SQLインジェクションはほとんどのケースで心配する必要がありません。ただし、ActiveRecordを用いずに、自分でDB操作するSQL文を書く場合に、一部のメソッドで問題が生じる場合があるので気を付けましょう。

クロスサイトリクエストフォージェリ(CSRF)

CSRFは、アプリケーションのページにスクリプトを組み込むことで、ユーザーのセッションが続いている状態で、意図しない行動を攻撃者が行うことができる脆弱性です。ユーザーのメッセージ投稿やアカウント情報の変更に留まらず、ECサイトでの商品の購入などを勝手にされてしまう可能性があります。

一般的にCSRFに対しては、アカウント情報の変更ページや商品の購入ページで、パスワード入力をさせる、POSTリクエストにトークンを埋め込む、ことによって対応します。

Railsでは上記で上げたうちの後者の対応策がデフォルトで実装されています。下記ファイルの「protect_from_forgery with: :exception」という部分は、リクエストにセキュリティトークンが含める記述です。

セッションハイジャック・セッション固定化

セッションハイジャックは、その名の通りセッションIDの盗み出しを行う行為です。また、ユーザーのセッションをIDを攻撃者が指定したものに固定してしまうことをセッション固定化と呼びます。セッションを乗っ取られると、正規のユーザーが行えるほとんどのことができてしまうので非常に深刻です。

通常、セッションIDの盗み出しについてはSSL、固定化に関してはログイン後にセッションIDをクリアすることによって対応します。

セッションハイジャックに関しては、下記ファイルの「config.force_ssl」をtrueにすることで対応可能です。はじめは、コメントアウトされているので、外しましょう。
config/environments/production.rb

また、セッション固定化は、Controllerのはじめに「reset_session」という一行を追加することで対応可能です。

情報セキュリティの知識は開発者にとって重要

Railsで開発をしていると上記のようなセキュリティ対策を意識せずともWebアプリケーションを作れてしまいます。しかし、情報セキュリティはユーザーを攻撃者から守るために非常に重要です。この機会に、さらに調べて知識を深めてみてください。

【オススメ記事】
➡︎ Rails初心者におすすめなRubyGemsを7個厳選してみた
➡︎ 無料の学習サイトでRubyを3ヶ月で身につけた経験
➡︎ Ruby on Railsが学べるスクール4選
➡︎ Ruby on Railsを学べる学習サイト6選
➡︎ Ruby on Railsの本・参考書の評判

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

おすすめスクール

全国30校舎で展開されるヒューマンアカデミーのWeb講座は修了者数4万人超、講師とカリキュラムの満足度がどちらも9割を超えています。就職や転職に必要なレベルの実務スキルを身に付けられます。

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

イチ押しランキング

1リナックスアカデミー

リナックスアカデミー

2システムアーキテクチュアナレッジ

システムアーキテクチュアナレッジ
ページ上部へ戻る