Heartbleed:震驚互聯網世界的計算機錯誤是編碼人員錯誤的結果。Internet Explorer 的零日漏洞也是如此。這些漏洞的巨大影響,尤其是 Heartbleed 是有目共睹的……問題又出現了,關于開發人員遵循的安全協議。僅僅是部分開發人員的粗心大意嗎?或者我們是否在制造很多色彩并為無法控制的事情哭泣?我們將與您分享7大網站安全錯誤列表,如果程序員避免這些錯誤,可以避免許多不眠之夜。沒有任何不可告人的意圖,我們將稱它們為:
編碼員應遵循的 7 條誡命:
1) 相信你的開發者伙伴……永遠不要!
眾所周知,應用程序通常是使用由其他編碼人員編寫的專有代碼或第三方軟件構建的。您可能想相信它們是安全的并且不包含任何漏洞,并且不會再考慮兩次檢查它們是否存在安全漏洞。雖然您將花時間保護您構建的應用程序,但過去的漏洞最終仍然使您的應用程序可被利用。
因此,開發人員需要做的是,要么嘗試從頭開始編寫代碼(等一下,不要掛我們!),要么確保您打算使用的第三方軟件遵循 OWASP/行業標準的最新指南。如果您有第三方軟件的源代碼,則必須對其進行靜態和動態分析。
2) 你應該禁止硬編碼密碼
您正在編寫代碼,進行了一些測試并且有很多事情要做,忘記刪除硬編碼的密碼......我的意思是,這可以理解,對嗎?有“n”件事情要做,你忘記刪除一些硬編碼的密碼會有多大的影響。你沒有注意到它,所以還有誰會……對吧?也許沒有人會。
或者也許有人可能!
2011 年,一名安全研究人員在西門子工業控制系統中發現了一個硬編碼密碼,該密碼可以讓攻擊者使用惡意命令對系統進行重新編程,從而破壞關鍵基礎設施,甚至鎖定合法管理員。硬編碼對程序員來說很容易……但如果以后有必要的話,就更難改變了。如果一個人在所有軟件中使用相同的密碼并且被惡意元素發現,那么每個客戶都會變得容易受到攻擊,并且由于難以修復,因此可以長期感受到影響。
您可以讓其他程序員或團隊審查您的代碼,以確保代碼中不存在硬編碼密碼。
3)您不得保留后門帳戶
不要在您的代碼中保留后門管理帳戶開戶。你可能會說你把它留在那里并忘記了它……但你不能這樣說來擺脫你的責任。你認為沒有人會找到它,但總會有人找到。
谷歌前首席執行官兼現任董事長埃里克施密特曾說過:“如果你有不想讓任何人知道的事情,也許你一開始就不應該這樣做。”
因此,如果您不希望人們知道您的后門條目,請不要一開始就將它們留在那里。
許多公司被指控在其應用程序中保留后門條目。蘋果是最新加入名單的公司,被指控在大約 6 億臺 iOS 設備中故意安裝安全后門,這可能導致用戶所有敏感數據的訪問。您永遠不知道會發現隱藏門的人將是朋友還是敵人,并希望沒有人會對您的應用程序或其安全功能感興趣,這是相當輕率的。
4) 你應該履行你的職責并檢查所有輸入
確保您的輸入有效。不要信任所有輸入并允許所需的最低權限。對包含用戶名的內容非常嚴格。例如,如果您希望輸入數字,請不要輸入字母。黑客可以通過以意想不到的方式修改輸入來利用不正確的輸入驗證。您可以做的另一件事是在將所有輸入用作輸出時對其進行 HTML 編碼。輸出編碼不足是大多數基于注入的攻擊的基礎。
SQL 注入連續兩次位居 OWASP 前 10 名漏洞之首。它是周圍最危險的安全漏洞之一,最近的大多數違規行為都歸因于它。不要盲目相信來自外部來源的輸入,例如基于 Web 的輸入。這樣提交的 SQL 查詢可以被利用來執行不希望的操作。可以理解,編碼人員無法檢查每個數據輸入,這可能非常耗時,但這是他們本質上必須做的。代碼就像你的軟件的一扇門,無論多么累,編碼員都有責任確保只有有效的輸入被傳入。
5) 您不得放棄保護您的數據的義務
在討論了輸入處理的主題之后,我們轉向數據安全。SANS Institute 列出的 25 個最危險的編程錯誤和 OWASP Web應用程序安全問題 Top 10,安全數據分別排在第 8位和第 6位。
編碼人員應該比他們認為應該更頻繁地使用加密。尤其是在當今時代,當用戶的個人信息包含極其敏感的細節時,如財務數據、身份數據等等。盡管在所有可能的地方使用加密,對我們來說似乎是一件輕而易舉的事,但由于它在整個過程中增加了一個步驟的非常明顯的原因,它仍然沒有被突出使用。與加密相比,在純文本中查找錯誤要容易得多,但出于同樣的原因,加密是必要的。我們不希望我們的數據以銀盤形式交給黑客……而加密可以防止這種情況發生。正確實施的加密有助于保持數據的安全。
6) 尊重你為之構建代碼的人——不要忽視第 8 層
您可能會考慮所有因素,但仍然失敗,因為您忘記考慮最重要的因素……將成為最終用戶的人。我們并不是說程序員應該在這里受到指責。用戶有自己的想法……你可能會說些什么,但對他們來說,這可能意味著完全不同的東西。
你問,編碼人員可以對此做些什么。很多!像最終用戶一樣思考,看看為用戶準備的錯誤消息和提示是否像你想象的那樣清晰。不要假設用戶總是能理解你的意思。當他們試圖改變他們不應該做的事情時,你會給他們一個警告信息嗎?大多數時候,您認為不言自明的命令對用戶來說毫無意義!
7)你應該建造適當的墻,只授權那些認為必要的東西
編碼員很難進行適當的控制。控制過多,軟件用戶會感到窒息。太少了,他們就會陷入困境……他們希望你保護他們。因此,他們希望獲得門控安全的所有優勢,但不想訂閱隨之而來的安全標準。許多用戶傾向于繞過基本的安全措施,以至于他們堅持使用默認憑據,除非被迫更改它們。
而你,編碼員總是會考慮給用戶多少皮帶。如果你讓事情變得困難,用戶會抱怨并使軟件對用戶不友好……你讓用戶變得容易,行動對攻擊者來說是回報的。
分離少數操作,例如需要財務數據輸入的操作,可能是一種出路。這里有一個雙因素身份驗證解決了不允許黑客有機會利用松懈的安全措施的目的。
例如,在使用信用卡付款的應用程序中,您是否要將信用卡號碼存儲在現金中,甚至存儲在服務器上?與信用卡關聯的姓名和地址呢?CVV號?從嚴格的安全角度來看,這里的關鍵組件是哪些?這里的權衡是對用戶的便利性而不是安全性。