お役立ちコンテンツ | フリーランスエンジニアの案件・求人なら【テクフリ】

お役立ちコンテンツ

フリーランスの抱える税金や確定申告、社会保険や経費に関するお悩みを解決いたします。そもそもフリーランスになるためにはどうすればよいのか、現在正社員で働いているが、フリーランスになりたいと考えている方々にも必見です。役立つコンテンツ満載でお届けいたします。

該当コンテンツ数2件中1~2件を表示
Ruby on Rails

gemとは何か 【Ruby, Ruby on Rails】

gemとは何か gemとはrubyのライブラリのことを指します。 gemの扱い方 gem list でインストール済みのgemの確認ができる $ gem list *** LOCAL GEMS *** actioncable (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionmailer (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionpack (5.2.1, 5.2.0, 5.1.6, 5.1.4) actionview (5.2.1, 5.2.0, 5.1.6, 5.1.4) activejob (5.2.1, 5.2.0, 5.1.6, 5.1.4) activemodel (5.2.1, 5.2.0, 5.1.6, 5.1.4) activerecord (5.2.1, 5.2.0, 5.1.6, 5.1.4) activestorage (5.2.1, 5.2.0) activesupport (5.2.1, 5.2.0, 5.1.6, 5.1.4) addressable (2.5.2) archive-zip (0.11.0) arel (9.0.0, 8.0.0) ast (2.4.0) bigdecimal (default: 1.3.4) bindex (0.5.0) bootsnap (1.3.1) builder (3.2.3) bundler (1.16.4, 1.16.3) byebug (10.0.2, 9.0.6) capybara (3.4.1) childprocess (0.9.0) chromedriver-helper (1.2.0) 〜省略〜 rails に関連するgemを探したい場合は gem search -r rails で探すことができる $ gem search -r rails *** REMOTE GEMS *** aa-rails4 (0.6.0) aaronchi-jrails (0.5.1) aavkontakte-rails3 (0.1.9) ab-experiments-rails (0.0.3) abcjs-rails (3.0.1) access-granted-rails (0.1.0) access-watch-rails (0.0.3) access_policy_rails (0.0.2) access_watch_rails (0.1.2) accessible-bootstrap3-rails (0.2.4) account_kit_rails (0.0.0) accountingjs-rails (0.0.4) ace-rails (0.0.2) ace-rails-ap (4.2) ace_editor-rails (0.0.1) ace_vimtura-rails (0.1.3) aced_rails (0.2.1) ack_favicon_maker_rails (1.0.2) ack_rails_admin_jcrop (0.2.0.2) ack_rails_admin_settings (1.2.3.3) act-fluent-logger-rails (0.5.0) 〜省略〜 なお、ブラウザで確認したい場合は下記を参照 ruby-toolbox RubyGems.org gem のインストールは gem install rails で可能だが、あまりお勧めできる方法ではない。 bundler で管理するのが常套 bundlerとは bundle inatall などで使われる bundler 。実はこれもgemの一つである。 用途はgemの管理。 gemを複数使っていると、依存関係が出てくる。 バージョンが??だの、あのgemがないだの言われる。 それをbundlerで管理する。そのファイルがGemfileである。 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.5.3' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' gem 'rails', '~> 5.2.2.1' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' # gem 'mini_racer', platforms: :ruby gem 'coffee-rails', '~> 4.2' gem 'jbuilder', '~> 2.5' gem 'turbolinks', '~> 5' # gem 'redis', '~> 4.0' gem 'bootsnap', '>= 1.1.0', require: false gem 'mini_magick', '~> 4.8' gem 'aws-sdk' gem 'carrierwave', '~> 1.0' gem 'config' gem 'devise' gem 'devise-i18n' gem 'draper' gem 'exception_notification' gem 'fog-aws' gem 'font-awesome-rails' gem 'gretel' gem 'kaminari' gem 'ranked-model' gem 'ransack' gem 'slack-notifier' gem 'slim-rails' gem 'yaml_vault' group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'web-console', '>= 3.3.0' gem 'better_errors' gem 'bullet' gem 'capistrano' gem 'capistrano-bundler' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-yarn' gem 'capistrano3-puma' gem 'guard-rspec', require: false gem 'rack-mini-profiler' gem 'rails-flog', require: 'flog' gem 'simplecov', require: false end 〜省略〜 source 'https://rubygems.org' でホスティングサーバーを指定。 gem 'rails', '~> 5.2.2.1' でrails のバージョンを指定。 group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'better_errors' gem 'bullet' end 本番環境で使うgemを指定。 こんな感じでgemを記載していく。 Gemfileを書き終えたら、bundle insrall でGemfileに記載された通りにインストールする。 その際に、Gemfile.lockを作成する。 このファイルがgemのバージョンをロックしバージョンが変わらない様にしてくれる。 つまり、gemが更新されても使用するgemのバージョンはそのままにしてくれる。 Gemfile.lockを更新したいときは bundle update を使う。 フリーランス案件を探す
Ruby on Rails

Gem Deviseによるパスワードの保存及び保安方法

はじめに Rails フレームワークを利用するアプリケーションでは登録とログインモジュールにDevise gem と bcryptがよく使っています。DeviseはRailsでおそらく最も人気な認証機能を実装できるgemです。 ユーザーのパスワードの暗号化とログイン確認に対してDeviseはデフォルトでbcryptを使用しています。 bcryptを利用しない例 下記はbcryptを利用しない認証フォローの1つ例です。 1. ユーザーが登録する時、パスワードはハッシュして、データベースに保存します。 2. ログインする時、入力したパスワードをハッシュして、データベースに保存したハッシュしたパスワードと比べて、一致したら、ログインできます。一致しなければ、「バイバイ」ですね。このアプローチには、暗号化アルゴリズムが常にパスワードが渡された固定文字列を返すという大きな欠点があります。例えば、SHA1アルゴリズムで使えば、”password” というストリングはハッシュした後いつも ”5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”というストリングを返します。 これにより、ハッカーがデータベースを攻撃し、ユーザーのパスワードハッシュであるデータを取得すると、ハッカーは、Rainbow Tableを作成してユーザー全体のパスワードを取得するために、一度だけ総当たりする必要があります(パスワード「password」または「123456」を持つユーザーは同一のハッシュ文字列を持っているため)。 したがって、同じパスワード文字列が他のハッシュを生成するソリューションが必要ですが、ユーザーがログインすると、比較結果が一致する必要があります。 そのため、パスワードに「salt」を追加する必要があります。 Bcryptによる、salt はランダムストリングです。Saltのおかげで、毎回ハッシュする時、違うストリングを返します。 bcryptを利用する例 下記はbcryptを利用する認証フォローの1つ例です。 1. ユーザーが登録する時、ランダム saltを発行して、saltとパスワードをハッシュして、encrypted_passwordを取得して、データベースに保存します。encrypted_passwordはsalt を含みます。パスワード同じですが、saltはランダムから、毎回ハッシュするのは新しいencrypted_passwordを作ります。 2. ログインする時, データベースのencrypted_passwordのsaltを取って、入力したパスワードとsaltをハッシュして、ハッシュしたストリングを取得して、そのストリングとencrypted_passwordを比べて、一致したら、ログインできます。 例えば、”my password”というストリングをbcryptで使って下記の形の1つ例でencrypted_passwordと呼びます。 $2a$12$K0ByB.6YI2/OYrB4fQOYLe6Tv0datUVf6VZ/2Jzwm879BW5K1cHey 今encrypted_passwordを分析します。 2a (最初の$の2つの間): bcrypt暗号化アルゴリズムバージョン12 (次の$の2つの間):costと呼ばれます。costの役割は何か後で分析します。K0ByB.6YI2/OYrB4fQOYLe(最後$の後のキャラクターの22個): saltと呼ばれています。6Tv0datUVf6VZ/2Jzwm879BW5K1cHey(最後キャラクターの31個): ctextと呼ばれます。ctextはsaltとパスワードからハッシュされます。 Costについて Costを説明いたします。 Costとは、ハッシュを何回実行するか、つまりどれだけ遅いかという尺度です。 あなたはそれを遅くしたい。 繰り返しますが、これはハッシュされたパスワードが盗まれた場合のセキュリティの冗長な層です。何でもブルートフォースするのは法外に高価になります。 Cost は4以上と31以下の数字です。Bcryptアルゴリズムでは例えばcostは12なら、繰り返し数は2^12=4096回。 Cost = log_2 (繰り返し数) なので、cost は高ければ、高くほどパスワードのハッシュは安全になります。 しかし、逆にcostが高ければ、高くほどハッシュの速度も遅くなります。 bcryptアルゴリズムです。 bcryptアルゴリズム 詳しくはhttps://ja.wikipedia.org/wiki/Bcryptで参考できます。 それだけパスワード保安方法は安全と思いますか? ランダムsaltはRainbow Tableを作成するコストを増加させましたが、人生は不明ですが、攻撃者は常に自分が望むものを達成する想像を絶する動機を持っています。攻撃者がスーパーコンピューターを持っているとデータベースを攻撃し、データを手に入理とします。そのスーパーコンピュータには、データのencrypted_passwordとsaltから、Rainbow Tableを作って、パスワードを見つけられます。 それでは、このリスクを最小限に抑える方法は?原則は、すべての卵を1つのバスケットに入れるのではなく、pepperです。Pepperはsaltに似たランダム文字列ですが、違いは、pepperを秘密にして、データベース以外の場所に保存する必要があることです。また、ユーザーあたりのpepperは必要ありません。ユーザーの全ては1pepper十分です。 Deviseはpepperを使っているのを見えられます。 Bcryptでhash_sceret(password, salt)からbcryptでhash(password, salt, pepper)に使うのはもっと安全になります。 ハッカーはデータベースを手に入っても、pepperがないから、rainbow tableを作れない、パスワードを取れないです。 ノート:攻撃者が何らかの方法でdbユーザーを持っていると想定している記事では、実際にはこれは非常に困難です。インフラストラクチャの設計など、他のセキュリティレイヤーがあるためです。それらの問題について話しません。 参考 Gem devise https://github.com/plataformatec/devise bcryptアルゴリズム https://ja.wikipedia.org/wiki/Bcrypt Gem bcrypt-ruby https://github.com/codahale/bcrypt-ruby Rainbow table https://ja.wikipedia.org/wiki/レインボーテーブル
<span class="translation_missing" title="translation missing: ja.layouts.footer.icon_back_to_top">Icon Back To Top</span>
TOP