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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

2773閲覧

rails BRAKEMANのエラー解消方法

RyoKawamata

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2017/07/10 08:20

編集2017/07/10 10:24

現在railsでwebアプリを開発しています。
ruby、ruby on rails共に1ヶ月程前から学び始めた初学者です。

開発中のwebアプリでBRAKEMANを利用してセキュリティチェックを行なったところ、
sql injectionのwarningが発生してしまいました。
該当コードを修正しようと思うのですが、BRAKEMANのoutputを見ても
どこを修正すれば良いかわかりません。

以下エラーの場合どのファイルを、どのように修正すれば良いのでしょうか?

情報の抜け等もあると思います。
その際はお手数おかけいたしますがご指摘お願いします。

以下BRAKEMANのoutputコピー

+SUMMARY+ +-------------------+-------+ | Scanned/Reported | Total | +-------------------+-------+ | Controllers | 5 | | Models | 4 | | Templates | 36 | | Errors | 0 | | Security Warnings | 1 (0) | +-------------------+-------+ +---------------+-------+ | Warning Type | Total | +---------------+-------+ | SQL Injection | 1 | +---------------+-------+ +SECURITY WARNINGS+ +------------+--------------------+----------------------------+---------------+------------------------------------------------------------------------------------------------->> | Confidence | Class | Method | Warning Type | Message >> +------------+--------------------+----------------------------+---------------+------------------------------------------------------------------------------------------------->> | Medium | ActiveRecord::Base | s(:self).reset_pk_sequence | SQL Injection | Possible SQL injection near line 8: ActiveRecord::Base.connection.execute("update sqlite_sequenc>> +------------+--------------------+----------------------------+---------------+------------------------------------------------------------------------------------------------->>

以下追記・・・・

エラーの該当ファイル以下に追記します。

lib/active_record/add_reset_pk_sequence_to_base.rb

ruby

1module ActiveRecord 2 class Base 3 def self.reset_pk_sequence 4 case ActiveRecord::Base.connection.adapter_name 5 when 'SQLite' 6 new_max = maximum(primary_key) || 0 7 update_seq_sql = "update sqlite_sequence set seq = #{new_max} where name = '#{table_name}';" 8 ActiveRecord::Base.connection.execute(update_seq_sql) 9 when 'PostgreSQL' 10 ActiveRecord::Base.connection.reset_pk_sequence!(table_name) 11 else 12 raise "Task not implemented for this DB adapter" 13 end 14 end 15 end 16end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/07/10 08:27

warningの出た場所のコードも書いてもらえますか?
RyoKawamata

2017/07/10 09:12

早速のコメントありがとうございます。warningの出た箇所がわからないのですが、どのファイルでしょうか??初歩的な質問ですいません。
RyoKawamata

2017/07/10 09:14

おそらく何処かのファイルの8行目というのは分かるのですが、それがどのファイルかはどちらを見ればよいのでしうか?
maisumakun

2017/07/10 09:15

確かにファイル名がありませんね…「ActiveRecord::Base.connection.execute」あたりでgrepをかければ見つかりませんでしょうか。
RyoKawamata

2017/07/10 10:20

アドバイスありがとうございます!agで検索したところ該当ファイルが見つかりました。追記いたします。
guest

回答1

0

ベストアンサー

変数代入のある生SQLを投げているのが「Possible SQL injection」に当たるわけなのですが、基本的にバインド機構を使ってSQLを組み立てるのが適切です。

ただし、今回に限ってはおそらく問題ないです。というのも、new_maxtable_nameも内部から供給される値であり、new_maxは確実に整数ですし、table_nameは(レールに乗った環境であれば)英数字とアンダーバーだけなので、余計なものが混入することがないからです。

投稿2017/07/10 12:32

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RyoKawamata

2017/07/10 13:42

ご回答ありがとうございます! つまりこのwarningは無視してよいということですよね。 安心しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問