前言
『程式不是會動就好!』,在安全性上的設計,更是完全的貼切這句話。如果設計出在裸奔的網站(請參考黑大的文章),就算網站上的功能可以正常運作,但千瘡百孔的網站,可能淪為人家的玩物或是提款機。
SQL injection的問題,在前幾年掀起了不少次旋風,甚至包括現在可能還有一堆網站有著同樣的問題,要命的是,根本不需要到駭客等級,就可以把有SQL injection問題的網站搞掛。一個程式設計師寫出來的程式,最要不得的就是有SQL injection的問題,我個人認為那是程式設計師不夠專業,甚至不夠格的表現。這不需要多高深的技巧跟學問,要嘛就是程式設計師偷懶,要嘛就是還不夠專業。
這篇文章簡介一下,SQL injection的基本原理,以及基本的防範措施。
結論
在patterns & practices Developer Center簡單歸納出三個步驟防止SQL injection:
- Constrain input.
- Use parameters with stored procedures.
- Use parameters with dynamic SQL.
補充
- web.config的custom error要記得打開,避免讓『使用者』看到詳細的錯誤訊息
- 權限這種東西,都是能開越小越好,包括資料庫。
- 所謂畫面可能被改變的值,可能包括了Url上的QueryString,post過來的表單資料,甚至於cookie內容假造。
- 除非別無選擇,請不要自己用filter黑名單的方式來阻擋XSS或SQL injection。原因:
- 自己想的黑名單再多,也沒有被全世界使用這麼久的library來得妥當。既然全世界寫.NET的人幾乎都用parameter在阻擋SQL injection,有這麼多人當墊背,就盡量別自己假掰。
- 就算.NET的Library真的被攻破了,有全世界加整個微軟的工程師在替我們緊張,基本上這種等級的問題,都是一天內就會有work around,下一波的patch就會修正掉。何樂而不為,應該把時間花在真正有價值的地方。
Cross-Site Scripting(XSS)的簡介與預防
這一篇則要介紹在Web上可能容易被忽略的問題:Cross-Site Scripting (原縮寫應為CSS,但要與Cascading Style Sheets區隔,所以簡稱為XSS)。
這篇文章會介紹一下XSS的基本原理,以及在ASP.NET上的防禦措施。
結論
在patterns & practices Developer Center簡單歸納出五個步驟防止XSS:
- Check that ASP.NET request validation is enabled.
- Review ASP.NET code that generates HTML output.
- Determine whether HTML output includes input parameters.
- Review potentially dangerous HTML tags and attributes.
- Evaluate countermeasures.
XSS的影響範圍很大,一旦最前面的資料輸入端沒有先處理好,讓髒資料進去DB後,要找到這些資料並清掉它,不是一件容易的事。身為一個Web程式設計師,SQL injection與XSS是兩個最基本的專業素養,請務必瞭解原理,並學會如何設計防範。
沒有留言:
張貼留言