0
1

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のセキュリティについて

Posted at

Railsのセキュリティについて勉強した時のメモです。

セッションハイジャック

セッションハイジャックとは?

セキュリティに問題のあるネットワークを使用するとCookieの内容を盗み取られる可能性がある。
Cookieの中にセキュリティIDがあるのでそれを奪われると代わりにログインされてしまうこと。

対策

Railsにはconfig/environments/production.rb

config/environments/production.rb
config.force_ssl = true

というオプションがありこれを追加することでssl通信(セキュリティ的に安全な通信)しか受け付けないようにできる。

CSRF

CSRFとは?

Cross Site Request Forgeriesと言い、攻撃者が他人のサイトにコードを埋め込むことでユーザーが操作した際に意図しない挙動を生み出す攻撃のこと。
例えば、ECサイトで戻るボタンが購入ボタンになっていて、戻るを押すと決済されていたみたいな感じ。

対策

post,put,deleteなどのデータに変更を加えるものは、tokenと一緒にリクエストしないといけないようにする。
Railsにはapp/views/layouts/application.html.erb

app/views/layouts/application.html.erb
  <%= csrf_meta_tags %>

という記述があり、ここでtoken(鍵のようなもの)が生成されるのでこれを取得してリクエストを送れば対策できる。

SQLインジェクション

SQLインジェクションとは?

SQLを操作するパラメーターなどを送ることでデータベースを操作して攻撃をする手法。
データベースを操作されるので場合によっては全てのデータを削除したり取り出されてしまう恐れがある。
具体的には、

User.where("name = '{params[:name]}'")

のようにwhereにハッシュではなく文字列を渡した場合、

params[:name]' OR 1 -- のように送られてきた場合

SELECT * FROM user WHERE name = " OR 1 --'

という全てのデータを取得するクエリが発行されるらしい‥ やばすぎ‥

対策

ユーザーから送られてくる値を直接使ってSQLのクエリを作らない。
findfind_bywhere(name:params['name'])など限定的なメソッドを使う。
Rails、Rubyっぽい書き方をする。

XSS

XSSとは?

Cross Site Scriptingと言い、コード付きのリンクなどを攻撃者が掲示板などに書き込み、そのリンクを踏んだユーザーに対して不正なプログラムを実行する手法。
ユーザー投稿型サービスではユーザーが投稿した内容をそのまま表示するので、ユーザーが投稿した内容にコードが含まれていた場合、投稿内容をクリックなどした人がプログラムを実行してしまう。

対策

投稿時にコードを入力してもコードではなく文字列として表示するようにする。
例えば以下のようにjQueryでコメントした内容を追加する処理の場合、
pタグに${comment.content}のように書くとコメントにコードを書いた場合そのままコードが反映されプログラムが実行される恐れがある。

const appendNewComment = (comment) => {
  $('.comments-container').append(
    `<div class="article_comment"><p>${comment.content}</p></div>`
  )
}

escapeを使うことでコードではなく文字列に変換してくれるので対策できる。

const appendNewComment = (comment) => {
  $('.comments-container').append(
    `<div class="article_comment"><p>${escape(comment.content)}</p></div>`
  )
}
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?