抽出 RoR 設定檔以增進安全性

目前比較有在動的 project 都是在 private network 裡跑的,使用者也不多,所以一直沒特別注意安全性的問題,真是不太好的習慣啊!趁著這次 OpenSSL bug 的機會,研究一下 Ruby on Rails App 的安全性設定。

secret_token.rb

secret token 基本上不能暴露出來,也不能重複,如果是 clone 別人的 project,也要記得改個新的。因此,不要讓 secret_token.rb 進到 repository 裡(加入 .gitignore),然後把既有的 app 打一把新的 token:

rake secret

database.yml

database.yml 存了後端資料庫的一些連線設定,當然也不能讓外人知道。雖然我都用 SQLite 檔來存,基本上沒什麼連線設定的問題,但為了以後可能改用其他 db,也趁機處理一下。

一樣放到 .gitignore 裡不要進 repository。

如果用 capistrano 來 deploy 的話,可在 deploy.rbnamespace :deploy 中進行 database.yml symlink:

  task :symlink_db, :roles => :app do
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
  end
  task :symlink_secret_token, :roles => :app do
    run "ln -nfs #{shared_path}/config/secret_token.rb #{release_path}/config/initializers/secret_token.rb"
  end

在 callback 部分加入

before 'deploy:assets:precompile', 'deploy:symlink_db'
before 'deploy:assets:precompile', 'deploy:symlink_secret_token'

接著把 secret_token.rbdatabase.yml 放到 production server 上的 #{shared_path}/config 目錄中。

以上。收工。