跳到主要內容

2013-JSDC.TW-閱讀心得

screenshot-2013-03-18-mor-10.35.123-990x3502013年的JSDC.tw在5/18、5/19兩天結束了,雖沒有親逢盛會,但講師們也不吝嗇的將簡報放在網路上共享,著實覺得揪甘心~~。稍稍瞄了一下善心人士提供的整理資料(JSDC.tw 2013 議程與投影片連結),發現有不少有趣議題,不過對於前端工程師的資安挑戰(講師:Ant)這個主題還滿感興趣的,所以花了點時間看了簡報包含前傳後傳,簡單的分享一下心得。

 

首先要來分享的是(前端)工程師面臨的資安挑戰的閱讀心得,在前傳與後傳中其實是有大部分雷同的內容,不過後傳比較像補充說明,因此如果有興趣閱讀還是建議從前傳看,再看後傳會比較有Feel~~(謎之音:騙肖ㄟ...技術文章還會有什麼Feel)。講師用了高橋流的簡報法,所以簡報數量驚人前後傳近250頁,不過由於內容簡要,所以看簡報有點就像在聽演講一般,可惜的是沒有看到LiveDemo,其實會關注這個議題是因為以往都會有固有觀念,資安不是應該在伺服器上解決,為什麼會提到前端網頁,但其實講師所重點的是JavaScript是運行在用戶端的,而且有跟後端的網站伺服器互動,因次如果相信前端所回傳的資料,不經處理,很又可能造成意想不到的後果,如2nd SQL Injection,SQL Injection是很早就有的議題,也相信很多開發者都會做基本的防護,但這些防護可能是針對對外的SQL Server而對內的SQL Server就不進行防護處理,因此當資料被從對外資料庫向對內資料庫傳遞時就有可能造成2nd SQL Injection,或者如果對於使用者在畫面上的輸入不做處理,直接回傳到前端網頁時,也可能造成前端網頁出現你所不知道的呈現,甚至對用戶端的破壞,所以講師提出了三個一定要遵守的原則:Filter Input、Escape Output、One Time Token

Filter Input:這裡指的不是在前端透過JavaScript或Validation去驗證,而是當資料被送回伺服器時,應該被再次確認,不要相信前端送回的(驗證後)的資料,因為這個驗證結果可能是被竄改過的。

Escape Output:這裡指的是當資料要送到前端時,要編碼將特殊符號處理過再傳送,不要原封不動的將資料往前端瀏覽器送,因為你不確定這些資料是不是前端使用者惡意塞入的資料。當你透過編碼後,就能避免大部分的危險。

One Time Token:許多網站都會透過 Cookie 或 Session 進行 Token的紀錄,這裡的 Token指的是登入權證,當你重複使用相同的權證,就會讓有心人可以取得權證資料,進而破壞,但是One Time Token就可以避免。例如現在許多金融網站很流行的 One Time Password,甚至是Facebook或Google中也有用到相同的概念進行更高規格的帳號驗證。

 

這三點中在目前的ASP.NET程式開發中,是有些解決方案可以處理:

Filter Input:這點其實就是希望程式設計師要做好資料處理,就是對於每個來自於前端的資料,至少要做基本的處理,如長度判斷,文字內容判斷或者是要設定邊際,如只允許輸入8個字元,不是在 TextBox的 maxlength屬性中設定8就好,當資料被傳到程式裡時,就是在取TextBox.Text時就要再判斷一次,這樣才能避免惡意的資料被傳入。

Escape Output:這個部分在ASP.NET其實只要透過HtmlEncode將資料處理過,就可避免,甚至在ASP.NET 4中更加方便處理 Escape Output,只要將原本的

image

改為

image

就可以得到相同的效果。

One Time Token:則是透過使用一次的密碼來驗證使用者,這樣的機制在許多金融機構都有相關配合硬體的方案,不過最主要的是,要讓使用者不要使用萬年密碼(就是都不變更),因此其實早就有這樣的機制可以被實作,如:Windows系統中的密碼複雜性原則,密碼用多久要變更一次?變更的密碼多少次內都不能重複?密碼必須由大寫英文、小寫英文、數字、特殊字元四種類型中的其中三種類型進行組合,更嚴謹的是要求各類字元不得少於幾個?這些都是在規劃密碼系統時可以被考量進去的。

 

其實資訊安全的關鍵在與開發系統時要以人性本惡的出發點來檢視,所有你覺得不可能的,其實都可能是最大的漏洞,如何讓漏洞減少,在於多做一些判斷,多做一些限制,看來麻煩點但是在資安與方便性地兩者選擇中,如何取得天平的平衡才是真正重要的。

留言

這個網誌中的熱門文章

以管理者權限執行批次檔

最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。

DataGridView欄位統一格式化

最近的工作內有一個需求,就是由於專案中有許多呈現資料的DataGridView,而其中的欄位需要呈現的包含金額、數字或者日期等格式,若要一個個的設定格式,如果有一天格式突然變更,可能就要苦工做到死,如何讓專案中的這些格式都統一就成了一個問題,經過了一番查找,發現可以透過DataGridView.CellFormatting Event來解決這個問題。

輕話要重聽,重話要輕聽 [IT邦幫忙鐵人賽 Day1]

在職場上總是會有被指導的時候,而這些被指導的過程中,就是你成長的時候,其實指導者願意告訴你,就是覺得你會有機會成長,所以才會提點,但提點的過程就會隨著指導者的EQ而有所不同,EQ高者會用比較婉轉的話語來告訴你,EQ低者會用比較強烈甚至傷其自尊的怒罵來指責你,此時此刻你所要學習的就是【輕話要重聽,重話要輕聽】。 由於明天(星期五)要繳交網頁的版面設計稿件給客戶,加上客戶直至星期二才交付相關素材,因此設計部門並沒有太多時間可以進行設計,這個案子大概是因為工作分配的關係就落在了一個半熟手的設計師手上,直至今天(星期四)早上,基於我是這個案子的PM,所以我找了負責這個專案的設計師開了一個小會討論,會中設計師也大概說明了設計理念與想法,而這些圖稿我也覺得應該還符合客戶期待,所以也就沒再多所著墨,會後我的主管突然提到想要看這些設計稿,當我把圖稿給主管看完後,只見主管的表情變得嚴肅,就像"突然李組長的眉頭一皺,發現結果並不單純",當下請了設計部的資深同仁來討論,頓時我也陷入了一陣糾結。結果當然是稿件還沒到客戶手上,主管當場就打槍了。不過這件事倒讓我發現了兩個現象: 現象1:就我的立場而言,要交給客戶的稿件是我同意的,所以當主管不滿意時,我應該要深刻的反省,包含稿件深度與質量的要求,但主管從頭到尾並沒有提到,也沒有多所責難,而是立即希望設計部進行調整,但當下的我卻選擇了【輕話要重聽】。也就是說,主管沒有責難,但我卻連主管要求的水準都達不到,是該自我反省,而非當作沒事一般。因此我將他列入工作紀錄中自省。 現象2:我們的主管EQ是個不錯的人,因此當他在討論稿件品質時,並沒有多所責難,僅是希望設計部門能趕緊補強調整,但是對於半熟手的設計師來說,等於否定了他的設計,因此設計師的失落感可想而知,這個時候其實他該選擇【重話要輕聽】,這些否定的話其實只是推動進步的一個挑戰,把話輕聽,別想太多,只要記得提點的重點,其他的否定就不該執著於上,因為如果只是執著別人的否定,那你就會忽略提點的重點。誰不是從被否定中成長的呢。 所以學習如何【輕話要重聽,重話要輕聽】這是職場生存的一個訣竅,前者是希望即便與你無關的事情,如果你重視他,將他學習下來,就會讓自己進步。後者是希望別著墨在否定的態度上,應該專心在如何讓否定成為肯定,了解為何否定,自然也會成為成長的動力。 第五屆IT邦幫忙鐵...