1. 程式人生 > >安全開發相關注意事項

安全開發相關注意事項

1.sql注入:這個很常規了,不要拼字串以及過濾關鍵字都可以防住,需要注意的是,Cookie提交的引數也是可以導致注入漏洞的。
2.旁註:就是說在保證自己的程式沒問題的同時,也要保證同臺伺服器的其他站點沒問題。至少要設定好系統許可權,即使別人的站點出問題也不能影響自己的站點。
3.上傳:儘量不要有上傳功能,如果必須有上傳功能。也要做到以下方面:不能讓使用者定義路徑、檔名,限制好可上傳的檔案型別。同時要限制好許可權,基本規則:執行和可寫是互斥許可權,不應同時存在。
4.口令強度:在設定密碼之類的功能上應加入密碼強度要求。伺服器上線部署的時候,應該立即把預設密碼修改掉。
5.防窮舉機制:適當的加入驗證碼,防止別人用程式窮舉賬戶密碼。
6.第三方控制元件:使用第三方控制元件,應經過嚴格的稽核(很多第三方控制元件上作者故意留有缺陷),並且剔除不必要的功能再使用。
7.許可權最小化:能給只讀就給只讀,儘量具體到每一個子目錄。
8.目錄非常規化:得到管理員賬戶密碼,但是找不到後臺登入地址也是很難入侵的。後臺路徑不要動不動就是 

http://xxxxx/admin、manager、gl之類的,很容易猜解。
10.XSS:俗稱跨站指令碼攻擊。使用者把HTML、JS之類的標籤輸入到編輯框,入庫之後,再顯示的時候可以導致版面錯誤、JS能解析執行之類的都屬於XSS的範疇。如果攻擊者插個Iframe連的是個木馬網頁,那檢視這個內容的人就悲劇了。解決方法:過濾大於小於號即可
11.CSRF URL跳轉未驗證漏洞:類似於XSS,只是把程式碼寫在URL裡,如
http://xxxx/logout.aspx?preURL=aaaa.html
即經常出現在登入退出的頁面,通過引數的preURL決定完成動作的時候跳向哪個頁面,如果照樣
http://xxxx/logout.aspx?preURL=javascript:alert('test'
)
就可以彈框,說明我們的js程式碼已經被執行起來了。

總之一句話,開發過程中,不要相信使用者提交的任何資料,規劃好目錄,做到許可權最小化,關閉、刪除不必要的東西,就相對會安全很多了。

cert 安全編碼建議:
1、驗證輸入:從不可信任的資料來源中進行的輸入需要驗證。合適的輸入驗證能減少大量軟體的弱點。必須對大部分的資料來源持懷疑的態度,包括命令列引數,網路介面,環境變數及使用者檔案。
2、留言編譯器警告:編譯程式碼時使用編譯器的最高警告級別,通過修改程式碼來減少警告。
3、針對安全策略的架構和設計:構建軟體架構和設計軟體時採用安全策略。例如:如果系統在不同的時間需要不同的許可權,則考慮將系統分成不同的互相通訊的子系統,每個系統擁有合適的許可權。
4、保持簡單性:設計越簡單越好,複雜的設計提高了實現時錯誤的可能性。
5、預設拒絕:預設的訪問策略建立在允許的基礎上。也就是說,預設的訪問是拒絕的,除非標明是允許的。
6、最小許可權原則:每個程序擁有完成工作所需的最小許可權。任何許可權的擁有時間要儘可能的短。這一方法能阻止攻擊者利用許可權提升執行任意程式碼的機會。
7、清潔傳送給其他系統的資料:清潔所有傳送給複雜子系統的資料,例如:命令外殼(shells),關係資料庫,商用元件。攻擊者可能通過SQL命令或者注入進行攻擊。這不是靠子系統通過輸入驗證來避免的問題,因為子系統不清楚呼叫的上下文,而呼叫過程指導上下文,所以有責任在呼叫子系統時清潔資料。
8、縱深防禦:這是一個通用的安全原則,從多個防禦策略中規避風險,如果一層防禦失效,則另一層防禦還在發揮作用。
9、使用有效的安全質量保證技術:好的質量保證技術能有效的發現和消除弱點。滲透測試、Fuzz測試,以及原始碼審計都能作為一種有效的質量保證措施。獨立的安全審查能夠建立更安全的系統。
10、採用安全編碼標準:為開發語言和平臺指定安全編碼標準,並採用這些標準。