質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • Ruby on Rails

    7237questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Railsのセキュリティーについて教えてください。

解決済

回答 3

投稿

  • 評価
  • クリップ 4
  • VIEW 243

koume

score 202

Rails5.1.3でWebアプリケーションの勉強をしながら、実際に公開することを目指して制作しています。
セキュリティーについてよくわからないのですがSQLインジェクション、セッションハイジャック、セッション固定化についての
質問です。

1,SQLインジェクションについて
whereメソッドで検索を行うときは、変数を直接打ち込んではいけませんと参考書に書いてありました。
以下のような記述はSQLインジェクション対策上、大丈夫なものでしょうか?

@unsub = Register.where("rg_#{@month}": "退会").pluck(:customer_id)

@mysponsor = Customer.where(sponsor1: mynickname)

2,セッションハイジャックについて
ただ単に#を外すだけでいいのでしょうか?
外すことにより表示とか、動作とかに影響はないのでしょうか?

config/environments/production.rb

config force_ssl = true ---------------------#を外す。

3,セッション固定化
controllerのはじめに「reset_session]という一行を打ち込むとありました。
全てのコントローラに打ち込むとして、表示とか、動作とかに影響はないのでしょうか?

class Customer::AccountsController < Customer::Base
 reset_session -----------------------------この一行を打ち込む。
  def show
    @acc_name = @customer.family_name + ' ' + @customer.given_name  
    @acc_name_kana = @customer.family_name_kana + ' ' + @customer.given_name_kana
  end

どなたか教えていただけないでしょうか?宜しくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

まずは、次のページを読むことをお勧めします。
Rails セキュリティガイド 
https://railsguides.jp/security.html

... このマニュアルでは、Webアプリケーション全般におけるセキュリティの問題と、Railsでそれらの問題を回避する方法について説明します。 ...

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/11 06:59

    Rubyには、素晴らしい資料があるんだなぁと感動しました。
    言語のフレームワークがほぼ固定化しているメリットですね。

    キャンセル

  • 2018/01/11 11:24

    回答ありがとうございます。とても参考になる資料を教えてくださり助かりました。
    今後とも宜しくお願いします。

    キャンセル

  • 2018/01/11 22:42

    横から失礼します、このガイドの日本語ドキュメントは内容が英語版と比較して少し古い気がします(2.2 Session IDの項)など。
    英語を読めるなら原文を読むほうがいいと思われます。
    http://guides.rubyonrails.org/security.html

    キャンセル

checkベストアンサー

+1

資料に書かれていない観点で、補足的な回答などを、、、。

  1. "rg_#{@month}": "退会"は、キー名を変数化しているようですが、これはSQLインジェクション攻撃に利用される可能性があります。こんな検索を行う必要はないのでは?
  2. コードやDBや設定ファイルにhttp://...形式で書いてあるURLはないですか?それらはすべてSSLの対象外となります。
  3. なんのためにセッションを使うのかという観点からすると、通常はユーザを識別するためです。毎回セッションをリセットしていたら意味がありません。大事なことは、権限を持たないゲストユーザから正式ユーザになるとき、つまりログインなどでユーザの権限に変化があるときに、前のセッションを破棄して、新しいセッションを開始するようにします。つまり、ログイン時とログアウト時に呼び出すのが普通です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/11 11:22

    回答ありがとうございます。コードを工夫して作り直してみます。今後とも宜しくお願いします。

    キャンセル

  • 2018/01/11 12:04

    もう一つ質問させてください。
    @mysponsor = Customer.where(sponsor1: mynickname)のmynicknameも変数なのですが、こちらは大丈夫でしょうか?
    whereメソッドで変数を使うときは、ハッシュで指定する。という文章を見つけましたので大丈夫かな?と思いましたが、不安なので教えていただけないでしょうか?

    キャンセル

  • 2018/01/11 18:47

    そちらは問題ないと思います。whereの中でサニタイズされるともいます。
    資料にある例は、SQLを文字列連結で作る例なので問題なのです。

    キャンセル

  • 2018/01/12 00:33

    ご親切にありがとうございます。助かりました。

    キャンセル

+1

Railsに限らず、Webアプリケーション一般が対象ですが一読をお勧めします。

安全なウェブサイトの作り方
つhttps://www.ipa.go.jp/security/vuln/websecurity.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/11 11:23

    回答ありがとうございます。参考にさせていただきました。今後とも宜しくお願いいたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    7237questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。