LoginSignup
5
0

More than 3 years have passed since last update.

GitHubで依存関係のセキュリティの脆弱性を指摘された

Posted at

プログラミングの勉強日記

2020年8月5日 Progate Lv.226
RailsのアプリをGitHubにプッシュしたら「One of your dependencies has a security vulnerability」というメールがたくさんきて、GitHubを見てみたら警告が出ていた。この対処法をまとめる。

セキュリティアラートの確認

0805.PNG

「We found potential security vulnerabilities in your dependencies.
Only the owner of this repository can see this message.」

という警告が出ている。
(メールにもセキュリティ警告のメールがたくさん届いた。)

「See Dependabout alerts」をクリックすると詳細がわかる。(スクショを取り忘れてしまった、、)

私の場合は「Gemfile.lock」を書きかえるよう言われていた。Gemfile.lockなんていじったことないのに、なんで…?という感じだったのでいろいろ調べてみた。

対処法

 ネットで調べてみた結果、コマンドでbundle updateを実行すれば解決するらしい。

ターミナル
bundle update

 いくつかの警告は減ったが、それでも警告が残ってしまっていた。

 警告内容を詳しく見てみると、railsとpumaを最新のバージョンにアップデートすればいいみたいだったので、Gemfileを書きかえた。(バージョンを指定しないと最新のgemがインストールされる)

Gemfile
#gem 'rails', '5.0.3' 
#以下に書きかえる
gem 'rails'

#gem 'puma', '3.6.2'
#以下に書きかえる
gem 'puma'

 Gemfileを書きかえたあとにbundle updateを実行する。

ターミナル
bundle update

 実行したら、GemfileGemfile.lockをプッシュする。
 警告が消えた!!

以上が解決方法である。
Gemfileはこちらの記事で触れているので、なんとなく理解しているが、Gemfile.lockがよくわからないので調べてみた。

GemfileとGemfile.lockの違い

Gemfileとは

 インストールしたいgemを記述するファイル。
 gem 'gemの名前'と記述する。rails newコマンドで生成されたGemfileにはすでにいくつかのgemが書かれてインストールされている。
 gem 'gemの名前', 'gemのバージョン' とすると、そのバージョンがインストールされる。バージョンを指定しないと、最新のgemがインストールされる。

Gemfile.lockとは

 bundle installした時に作られるもの。Gemfileと似ているが、Gemfileに書いていたgemが必要としている別のgemも含め、動作に必要な全てのgemが展開される。つまり、Gemfile.lockはGemfile には書いてなくても,依存している gem は書かれている。
  gem 自体がインストールされたかされていないかに関わらず、bundle installしたときに「Gemfile」に書かれたgemについてのバージョンや名前は「Gemfile.lock」に書かれている。

Bundlerについて

 Bundlerはgemを管理するためのgemのこと。bundle installbundle updateなどを使用することができる。
 Bundlerは「Gemifile」に書かれてあるgemの他に必要なgemもあり、それらを自動でインストールして「Gemifile.lock」に記述する。

違い

  • Gemfileは、インストールするgemを指定するファイル。
  • Gemfile.lockは、実際にインストールされたものを記載したファイル(全部のgemが書かれている)。Bundlerでインストールされるgemパッケージの依存関係の解決結果とバージョンを固定する役割がある。単にgemだけ書いてあるGemfileと違って、バージョンまで書いてある。

gem updateとbundle updateの違い

 gem コマンドは「Gemfile」や「Gemfile.lock」とは無関係である。gem update はシステムにインストールされている gem について、それより新しいバージョンがあればその最新版をインストールする。

 bundleコマンドは「Gemfile」と「Gemfile.lock」と関係している。「Gemfile.lock」は、bundle installすることで書き込まれる。(インストールを行った後に更新されている)

bundle install と bundle updateについて

bundle install:「Gemfile.lock」を元にgemのインストールを行う。新しい環境や、gemfileに新しくgemを記述したときに使う。

bundle update:「Gemfile」を元にgemのインストールを行う。

参考文献

GitHubでセキュリティ脆弱性のアラートが来てビビりながら対応した話
Githubから脆弱性を指摘されたのでメモ
Gemfile.lock が更新されるタイミングはいつなのか?
bundle installとupdateの使い方について

5
0
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
5
0