?譯者 | 張?jiān)霰?/p>
策劃 | 徐杰承
目前,為了縮短軟件的上市時(shí)間,幾乎每一家企業(yè)都在尋找能夠使軟件開發(fā)過程提速的方法。但在這其中,大量企業(yè)并沒有充分考慮軟件安全性相關(guān)的問題。
那么作為一位軟件開發(fā)人員,該如何確保開發(fā)過程的安全性呢?軟件開發(fā)工程師可以使用多種方法來確保代碼和數(shù)據(jù)的安全。
1、模塊化編碼
軟件已經(jīng)成為我們?nèi)粘I畹闹匾M成部分,因此我們遵循安全編碼實(shí)踐才有意義。畢竟,軟件開發(fā)工程師需要對代碼的安全負(fù)責(zé),我們需要確保不會危及到代碼的安全性。
好消息的是,安全編碼實(shí)踐并不是一件新鮮事。事實(shí)上,大多數(shù)有經(jīng)驗(yàn)的軟件開發(fā)工程師已經(jīng)熟悉其中的一些規(guī)則。
安全編碼最基本的概念之一是處理異常的概念。異??赡苡捎诙喾N原因而發(fā)生,包括輸入錯(cuò)誤、邏輯錯(cuò)誤或配置錯(cuò)誤。
為了使軟件更加安全,必須假設(shè)在某些時(shí)候會出現(xiàn)異常。與其讓這些事件發(fā)生,不如通過捕獲它們并執(zhí)行一些操作來阻止代碼繼續(xù)執(zhí)行。
2、代碼混淆
代碼混淆是一種重要的做法,它可以防止黑客訪問應(yīng)用程序中的敏感信息。而代碼混淆涉及各種技術(shù),例如算術(shù)混淆,將正確的數(shù)值替換為具有誤導(dǎo)性的數(shù)值。
字符串加密是另一種代碼混淆方法,它將字符串隱藏存儲在可執(zhí)行文件中,然后在運(yùn)行時(shí)顯示原始值。
代碼混淆使代碼難以閱讀,通過刪除換行符和空格,降低代碼的可讀性。這種做法是提高程序性能的好方法,但同時(shí)代碼混淆也存在很多風(fēng)險(xiǎn)。
雖然它看起來無危害,但它會帶來嚴(yán)重的安全后果。例如,如果攻擊者可以讀取軟件的代碼,他們就可以使用它來提取敏感信息,例如API密鑰或密碼。
使用代碼混淆的主要好處是它可以生成更輕便的應(yīng)用程序和更高效的代碼執(zhí)行。此外,它還可以保護(hù)你的知識產(chǎn)權(quán)。在某些情況下,攻擊者會通過泄露代碼中的安全漏洞來敲詐行業(yè)巨頭。
這是應(yīng)用程序開發(fā)工程師用來保護(hù)不同程序代碼的常用方法。因?yàn)橹苯佑萌庋鄄榭创a時(shí),混淆代碼幾乎無法理解。
3、訪問控制
安全編程最重要的方面之一是訪問控制。它允許開發(fā)人員限制對敏感數(shù)據(jù)的訪問,同時(shí)防止訪問不受信任的數(shù)據(jù)。它還通過限制對具有正確權(quán)限的用戶的訪問來防止數(shù)據(jù)從系統(tǒng)泄漏。
除非經(jīng)過身份驗(yàn)證,否則用戶將無法登錄到管理頁面。
為確保安全的編碼實(shí)踐,開發(fā)工程師應(yīng)評估其軟件開發(fā)生命周期的成熟度以及開發(fā)工程師的技術(shù)棧。
安全編碼實(shí)踐只能由擁有足夠能力和經(jīng)驗(yàn)豐富的開發(fā)工程師實(shí)施。開發(fā)工程師應(yīng)該能夠在提交代碼之前驗(yàn)證系統(tǒng)設(shè)計(jì)并驗(yàn)證輸入。
訪問控制是安全編碼框架的一個(gè)重要方面,開發(fā)工程師必須了解如何實(shí)施它。缺乏適當(dāng)?shù)脑L問控制可能會導(dǎo)致災(zāi)難。幸運(yùn)的是,有許多技巧和工具可以幫助開發(fā)工程師保護(hù)他們所開發(fā)的軟件。
例如,開發(fā)工程師應(yīng)始終加密敏感數(shù)據(jù)并以加密形式存儲。為了進(jìn)一步提高安全性,開發(fā)工程師應(yīng)將敏感數(shù)據(jù)嵌入本地參數(shù)存儲、var文件和代碼存儲庫中,切勿讓其處于不受保護(hù)的狀態(tài)。
安全編碼是開發(fā)工程師設(shè)計(jì)代碼以遵循安全最佳實(shí)踐的過程。此過程保護(hù)已發(fā)布的代碼免受已知和未知漏洞的侵害。它還可以防止黑客利用安全漏洞并將其用作攻擊系統(tǒng)的載體。
成功實(shí)施安全編碼實(shí)踐需要改變公司內(nèi)部的文化。
4、阻止反射型XSS
XSS攻擊有兩種類型:持久型攻擊和反射型攻擊。持久型XSS攻擊針對易受攻擊的網(wǎng)站或應(yīng)用程序的所有用戶。當(dāng)攻擊者將惡意腳本注入鏈接,然后用戶單擊它執(zhí)行它時(shí),它就會起作用。
另一方面,反射型XSS只需要用戶單擊一次。
這種類型的XSS攻擊使用JavaScript代碼在被攻擊者的瀏覽器中運(yùn)行并利用各種漏洞。該代碼還可用于獲取對用戶計(jì)算機(jī)的訪問權(quán)限、加入僵尸網(wǎng)絡(luò)或竊取用戶敏感數(shù)據(jù)。大多數(shù)反射型XSS攻擊都是基于社會工程技術(shù)。
攻擊者可以通過制作偽造的登錄頁面來誘使用戶相信他們正在登錄安全網(wǎng)站。這允許攻擊者竊取用戶的密碼管理器,從而導(dǎo)致安全漏洞。
反射XSS攻擊更難檢測。攻擊者通過釣魚郵件向被攻擊者發(fā)送惡意URL。受害者的瀏覽器然后加載站點(diǎn)的搜索頁面。后端處理搜索詞,攻擊者將惡意腳本插入到響應(yīng)中。
另一種類型的XSS攻擊涉及使用不受信任的輸入。這些攻擊是攻擊者滲透網(wǎng)站并攻擊其用戶的好方法。出于這個(gè)原因,開發(fā)工程師應(yīng)該采取措施通過遵循安全編碼實(shí)踐來保護(hù)他們的Web應(yīng)用程序。
例如,使用OWASP編碼項(xiàng)目庫,開發(fā)工程師可以通過啟用“X-XSS-Protection”標(biāo)頭來輕松保護(hù)他們的Web應(yīng)用程序。
5、在開發(fā)過程前期發(fā)現(xiàn)漏洞
軟件漏洞是應(yīng)用程序設(shè)計(jì)或?qū)崿F(xiàn)中的弱點(diǎn),可能允許未經(jīng)授權(quán)的用戶運(yùn)行命令或利用系統(tǒng)。
雖然并非所有軟件安全缺陷都是實(shí)施錯(cuò)誤,但大約一半的可利用安全缺陷是由于軟件設(shè)計(jì)缺陷造成的。這意味著組織需要時(shí)刻保持警惕,以識別和修復(fù)潛在的漏洞。
漏洞按照嚴(yán)重性和風(fēng)險(xiǎn)分類,可能會影響軟件、服務(wù)器和網(wǎng)絡(luò)。如果沒有修復(fù)漏洞,網(wǎng)絡(luò)犯罪分子可能會利用這些漏洞竊取敏感數(shù)據(jù)、中斷服務(wù)或破壞公司資產(chǎn)。
因此,在開發(fā)過程的前期識別和修復(fù)漏洞非常重要。
漏洞可分為高風(fēng)險(xiǎn)或低風(fēng)險(xiǎn)。這就是為什么對漏洞的嚴(yán)重性進(jìn)行優(yōu)先排序并以系統(tǒng)的方式對修復(fù)進(jìn)行優(yōu)先排序很重要。
一旦確定了漏洞,公司就可以使用漏洞評估來確定對此負(fù)責(zé)的組件,并確定哪些組件需要更新或配置更改。
漏洞是由不良的輸入驗(yàn)證和過濾引起的。如果攻擊者發(fā)現(xiàn)敏感輸入,他們可以運(yùn)行任意命令,包括JavaScript、SQL查詢或SMTP參數(shù)。他們甚至可以遠(yuǎn)程控制服務(wù)器并訪問底層應(yīng)用程序數(shù)據(jù)。
6、記錄安全編碼實(shí)踐
安全編碼實(shí)踐是網(wǎng)絡(luò)安全的關(guān)鍵部分。他們要求開發(fā)工程師負(fù)責(zé)保護(hù)他們的代碼免受惡意攻擊和威脅代理。開發(fā)工程師應(yīng)遵循幾種不同的做法。以下只是幾個(gè)例子。
無論你的平臺、語言或?qū)崿F(xiàn)如何,你都應(yīng)該遵循安全編碼實(shí)踐。
通常,安全編碼實(shí)踐側(cè)重于編寫沒有已知漏洞的代碼,這些漏洞可能會暴露數(shù)據(jù)或?qū)ο到y(tǒng)造成損害。當(dāng)應(yīng)用程序不安全時(shí),黑客攻擊者可以訪問它們并使用它們包含的信息來滲透系統(tǒng)。
此外,不安全的應(yīng)用程序會對公司的聲譽(yù)產(chǎn)生負(fù)面影響。安全編碼實(shí)踐旨在檢測和消除軟件應(yīng)用程序中的這些漏洞,最大限度地減少數(shù)據(jù)破壞的可能性并允許安全地使用應(yīng)用程序。
開發(fā)工程師必須理解這些問題并適當(dāng)?shù)赜涗浰鼈儭4蠖鄶?shù)漏洞是由典型的編程錯(cuò)誤引起的。
通過收集常見的編程錯(cuò)誤和安全編碼實(shí)踐,開發(fā)工程師可以創(chuàng)建測試用例以確保他們的代碼遵循這些規(guī)則。
此外,開發(fā)工程師可以使用代碼簽名過程來保護(hù)他們的軟件代碼免遭篡改。使用測試用例和實(shí)現(xiàn)日志記錄,開發(fā)工程師可以幫助調(diào)試錯(cuò)誤。
每個(gè)開發(fā)工程師都應(yīng)該理解的記錄安全編碼實(shí)踐應(yīng)該包括指南和最佳實(shí)踐。理想情況下,文檔應(yīng)包含示例和易于實(shí)現(xiàn)的語言。它還應(yīng)包括有關(guān)手動(dòng)測試和合規(guī)性測試的指南。
原文鏈接:https://hackernoon.com/secure-coding-practices-every-developer-should-know
譯者介紹
張?jiān)霰螅?1CTO社區(qū)編輯,多年的安全攻防從業(yè)經(jīng)驗(yàn),主要研究方向:安全開發(fā)、逆向破解、漏洞挖掘、黑灰產(chǎn)攻防對抗。?