2013年8月19日 星期一

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

Same-Origine Policy

在 JavaScript 中有 Origine 的限制,可以參考以下的條件:


目前查到的解決方法有三種:
1. JSONP 但只限制用 HTTP Get 取得資料
2. Iframe or Form DOM 的 submit (網頁會 Reload,所以不受 Origin 的限制)
3. 在 Server 端設定 Cross-Origin Resource Sharing (CORS)

PS. AJAX 會受到 Origin 的限制

Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS