IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Inst. Tech View

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第4回 Ruby on Rails セキュリティ対策 2011年7月

 今回のInst. Tech Viewは、生産性の高いWebアプリケーションフレームワークであるRuby on Railsのセキュリティ機能についての話題です。

 Ruby on Railsはプログラミング言語Rubyで開発されたWebアプリケーションフレームワークです。
Webアプリケーションフレームワークとは、Webアプリケーションを開発する際に頻繁に必要とされる機能を提供するソフトウェアです。 Ruby on Railsを使用することで本来実現したい機能に集中し、アプリケーションをスピーディに開発することができます。

 Ruby on Railsは様々な機能を備えたフレームワークですが、その中でもセキュリティ対策における機能をご紹介します。

 Webアプリケーションにおける代表的な脆弱性としては以下のようなものが挙げられます。

  • SQLインジェクション
  • クロスサイトスクリプティング(XSS)
  • クロスサイトリクエストフォージェリ(CSRF)
  • OSコマンド/スクリプトインジェクション
  • セッション固定攻撃
  • パラメータマニピュレーション

 今回は、上記の脆弱性の中でもXSS、CSRFの対策方法に注目します。

 XSSはWebページの入力フォームから入力した内容を適切にエスケープしないままHTML中に出力することで、入力中に存在するタグ等の文字がそのままHTMLとして解釈されることを悪用した攻撃です。
 これによりJavascript等のスクリプトが実行されてセッションハイジャックなどの悪意のある行為が行われてしまう可能性があります。

 Ruby on Railsのバージョンによって対応方法は異なりますが、バージョン3からは自動で特殊文字がエスケープされますので、入力内容の表示部分では以下のように記述することができます。
 以下はRuby on Railsで作成したWebアプリケーションの一部で、ブログなどで入力されたタイトルを表示する例です。

# タイトルに「<script>alert("crack");</script>」が
  入力されていたとします。
 | <h1><%= @title %><h1>
 #=> <h1>&lt;script&gt;alert("crack");&lt;/script&gt;</h1>

 テンプレートエンジンによって記号がエスケープされている事がわかります。

 また、XSSの攻撃対象に成りかねないのであまり推奨されておりませんが、敢えてエスケープ処理を行わせない場合rawメソッドを使用します。

# タイトルに「<script>alert("crack");</script>」が
  入力されていたとします。
 | <h1><%= raw @title %><h1>
 #=> <h1><script>alert("crack");</script></h1>

 次に、CSRFの対策方法です。
 CSRFは別のサイトに用意したコンテンツ上にある罠のリンクを踏ませること等をきっかけとして不正なコードを実行させる攻撃です。
 例えば正規アカウントのセッションを利用し、ショッピングの決済やアカウント退会などの重要な処理が行われてしまう可能性があります。

 これに対してRuby on RailsではデフォルトでCSRFの対策が行われております。
 不正なアクセスであれば自動で例外処理を行う、protect_from_forgeryというメソッドがすべてのコントローラに適用されるコントローラクラスに記述されています。
 これにより、form_for等のメソッドで生成するフォームに自動でトークンが埋め込まれ、入力された値と合わせてトークンがサーバに送られます。
 このトークンを用いて自動照合が行われ、正規の入力フォームからの入力かを判断します。
 これにより強制的に送りつけられたパラメータを除外することができ、対策に繋がります。

 Ruby on Railsは様々なWebアプリケーションの脆弱性に対してデフォルトで対応しているなど、初心者でも入りやすいフレームワークです。
 弊社トレーニングを参考にRuby on Railsを始めてみてはいかがでしょうか。

 >> Ruby・Railsの関連コース一覧

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes