系統開發SOP

SOP

  1. 和客戶確認他要做什麼東西 和客戶一起把user story寫下來

    可以由不懂技術的人員做這一塊 但是知道怎麼去用自然語言描述客戶的需求 轉成一個一個的使用者故事

  2. tecLeader 根據user story 來選擇要使用什麼樣的技術來做

    需要什麼樣的專業人員在協助和人員配置

    例如: 後端使用什麼技術 例如使用Ruby on Rails 4.2.1, Ruby 2.2.2 前端使用什麼技術 例如:RWD,bootstrap,reactjs 什麼樣風格的設計師設計出的風格是客戶所要的

  3. teamwork tool standing by (1) Redmine (2) Git Server (Github or Bitbucket or self server) (3) Staging Server

  4. tecLeader 做系統分析

  5. tecLeader 開始根據人員配置和系統分析摟的結果和案子時程 來進行開票和控管進度流程

[Rails]今天在用購物車時發現一個Session問題

Session換頁之後, 商品沒有紀錄上去

查了之後發現是 From for 在新增商品沒 CSRF的auth code沒有新增

造成對應不到Session

所以每次新增商品時 都會重新開一個Session

所以造成購物車的商品不會累加

另外

由於Session裡面存的是購物車的是一個ruby物件

所以如果用 cookie store 由於 cookie無法儲存物件

所以用cookie會失敗

這個是由在Rails 4.1 之後的更新所做的修正

可參考 1. http://guides.rubyonrails.org/upgrading_ruby_on_rails.html 2. http://blog.plataformatec.com.br/2014/04/3-features-from-rails-4-1-that-im-excited-about/

之前Rails可以將Ruby物件放在Cookie的原因是他使用了 Marshal.dump and Marshal.load 來做物件的serialized (and deserialized)

但是由於這種做法,假如hacker如果拿到你的cookie加密的key就可以從你的cookie 解密出你存在裡面的物件, 所以降低了網站的安全性

因此Rails 4.1的更新, 讓Cookie只能儲存一些簡單的資料, 例如:string, integer, hash, array等 複雜物件就無法儲存

但也不是無法儲存, 只是物件的serialized (and deserialized) 就必須自己做了

網路安全-CSRF-跨站偽裝請求

CSRF 情況:

  1. 瀏覽器如果發送請求時,如果在瀏覽器的cookie紀錄裡面有找到目標Domain的對應的cookie,就會將這個cookie一同送給server做請求

  2. 但是如果使用者在A網站已經認證完,且session尚未timeout

  3. 這個如果使用者在瀏覽B網站時,B網站自動發送一個請求給A網站

  4. A網站會認為是使用者自己發送的

  5. 如此可以達到偽裝使用者在A網站的所有操作

對策:

  1. use GET and POST appropriately

    就是正確的使用Get和Post, 如果是獲取資料的地方就使用GET, 需要更新或是新增的地方就使用POST

  2. a security token in non-GET requests will protect your application from CSRF.

    如果是GET以外的行為例如: POST, 這時就必需使用一個認證碼來驗證次動作

    實作的方法通常就是, 當使用者獲取一個更新操作或是新增頁面的時候, Server會自動產生一個驗證碼(security token)並將它同時 和這個更新操作或是新增頁面同時送到使用者的瀏覽器

    使用者要進行新增或是更新時會POST資料到Server,同時POST的資料裡面會跟隨這個驗證碼(security token)一起送到Server, 所以Server就根據這個驗證碼的正確與否來決定這個POST的行為是正確的還是偽造的

WordPress後台可以直接改改檔案的相關設定?

最近我又使用Wordpress來發佈自己的部落格, 但是發現Wordpress無法直接在後台的管理更改檔案 例如: 更改themes的css或是相關的php檔案

為何會這樣呢? 其實就是個權限問題

但是權限問題要怎麼處理呢?

如果wordpress是運作在Apache上的PHP, 這個情況就是如果Apache是用什麼身份去執行, PHP就會用相同的身份去執行

先看看Apache是用什麼身份執行的, 打上

ps aux | egrep '(apache|httpd)'

如圖: 螢幕快照 2016-04-20 下午10.46.47

可以發現Aapache是使用www-data這個使用者身份在執行的

所以只要你的wordpress的檔案夾可以被www-data身份修改的話, 就可以達到這個需求

要做到這一點只要執行

chown -R [your_user]:www-data wordpress-root

來將wordpress-root的資料夾裡面的檔案更改為 group:www-data

再執行

chmod -R 775 wordpress-root

將他的權限更改為group可以執行修改和讀取的動作

Sinatra 做簡單的ruby Server

ruby寫一個簡單的備份Server

最近有一個需求 就是用ruby寫一個簡單的備份Server

但是如果利用Rails來做的話, 就會覺得簡單的功能,用Rails 反而覺得太複雜了

所以就用Sinatra

Sinatra在背景執行

nohup ruby web.rb >> log/file 2>&1 &

關閉執行的sinatra程序

方式1:
File.open('myapp.pid', 'w') {|f| f.write Process.pid }

shell: kill `cat myapp.pid`

ruby: Process.kill 'TERM', File.read('myapp.pid’)
方式2:
ps aux | grep ruby $ kill <ruby-process-id>