2013年9月24日 星期二

程式設計筆記

前陣子讀了 2/3 的 Clean Code 補了不少 coding 的觀念 (Java 的部分我不熟,所以跟 Java 相關的我直接跳過),接連兩天的 Code Review 會議又聽到了一些不錯的觀念,就筆記一下。

A. 盡可能在設計時要考慮到
1. 簡化流程
2. 保持彈性
3. 提高擴充性

B. 提高資料的描述性方便取用
1. 變數名稱
2. 物件封裝

C. 處理最大量資料的效率

D. 變數或函式取名時可以參考其他語言常見或既有的名稱,提高可讀性

2013年8月19日 星期一

什麼是程式設計師最重要的技能

1. 對程式語言的熟悉
2. 對整個平台運作的熟悉
3. 熱情
4. 溝通

但最重要的是溝通!

Reference:
http://www.techbang.com/posts/14478-program-designers-of-the-most-important-skills

2013年8月17日 星期六

使用 encodeURIComponent 將字串傳換為 URI 要將空白換成+


##
For application/x-www-form-urlencoded (POST), spaces are to be replaced by '+', so one may wish to follow a encodeURIComponent replacement with an additional replacement of "%20" with "+".
##

Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
http://www.w3.org/TR/html401/interact/forms.html#form-content-type

2013年8月13日 星期二

Boundary Test (Error Handling)

評估資料來源,是否確定一定不會有例外資料進來,如果不會有,就不用檢查,如果資料來源有可能超乎預期,就要檢查。

也或者說提供別人呼叫的 API 都要檢查進來的資料最保險。

1. Web UI
2. CGI (HTTP 的 Request 不一定來自瀏覽器,也可以擷取封包自己塞資料)
3. API

處理字串和記憶體時的保護性寫法

當我們在處理字串或記憶體時盡量使用保護性的寫法,可以減少 Overflow 或 Overlap 的機會。

1.  使用可以掌握資料長度的寫法
memcpy

strncpy
strncat
snprintf

2. 使用可以暫存資料位址的寫法
strtok_r

3. 檢查字串是否包含 '\0'

透過 HTTP 傳送資料給 CGI 的注意事項

Web 用戶端 (瀏覽器) 可以透過 HTTP Get 或 Post 的方式將資料傳送給 Server 的 CGI 處理。
但我們也可以透過仿造 URL 或擷取封包修改內容的方式,將修改過後的內容傳送給 Server,不經由原本用戶端的 Form 或 JavaScript。因此除了在用戶端驗證資料的正確性與合法性,也必須在 Server 端作相同的驗證。

以下舉出幾種必須驗證的 Case:

1. 資料長度太長。
2. CGI 要接收數字但傳送過來的資料包含數字與其他字符。
3. 資料沒有落在定義的範圍中。
4. 沒有限制接收檔案的大小。

如果涉及敏感的資料如帳號密碼,必須要先加密後再傳輸。

2013年8月1日 星期四

Cookie 在 HTTP 和 HTTPS 間的使用限制

在相同 Domain 的情況下:
  • HTTP Cookie, with "Secure" will be returned only on HTTPS connections (pointless to do this)
  • HTTPS Cookie, with "Secure" will be returned only on HTTPS connections
  • HTTP Cookie, without "Secure" will be returned on HTTP or HTTPS connections
  • HTTPS Cookie, without "Secure" will be returned on HTTP or HTTPS connections (could leak secure information)

Reference:
http://stackoverflow.com/questions/2163828/reading-cookies-via-https-that-were-set-using-http
RFC2965 3.3