程序員需要謹記的九大安全編碼規則

?

歷史已經證明,軟件設計的缺陷一直是導致其漏洞被利用的最主要的罪魁禍首。安全專家發現,多數漏洞源自常見軟件中相對有限的一些漏洞。軟件開發者和設計者應當嚴格檢查程序中的各種錯誤,盡量在軟件部署之前就減少或清除其中的漏洞。

下面列舉的這些方法會有助于開發人員提高編碼的安全性:

一、注意編譯器警告

程序員應當使用編譯器的最高警告等級。在編譯過程中,應當修改程序中的錯誤,直到警告解除。應當使用靜態和動態的分析工具來檢測和清除安全缺陷。

二、根據安全策略設置軟件架構

設計者應創建一個軟件架構,并在設計軟件的過程中實施和強化安全策略。例如,如果你的系統在不同的時間要求不同的特權,就不妨考慮將系統分解成能夠互聯通信的不同的子系統,每一個系統都有自己適當的特權。這種“分而治之”的方法可以有效地提高應用程序的安全性。

三、驗證輸入

程序設計者在設計程序時必須驗證來自所有不可信數據源的輸入。適當的輸入驗證可以清除多數軟件漏洞。在設計程序時,必須對多數外部的數據源抱著懷疑的態度,其中包括命令行參數、網絡接口、環境變量、用戶控制的文件等。

四、保持程序簡單

設計者要盡量使程序短小精悍。復雜的設計會增加實施、配置、使用過程中出現錯誤的可能性。程序越復雜,就需要越多的復雜的安全控制,企業需要付出的努力也就會越多。

五、拒絕默認訪問

訪問決策的制定應當根據許可權限而不是根據其它的任何方面。這意味著,默認情況下,應當拒絕訪問,程序的保護機制應當根據“允許誰訪問”來確認訪問條件。

六、遵循最小特權原則

程序的每個處理過程在執行時,都應當僅使用為完成其工作而需要的最小特權。任何提升的許可權限都要盡量持續最短的時間。這種方法可以減少攻擊者用提升的特權執行任意代碼的可能性。

七、“凈化”傳送給其它系統的數據

所謂“凈化”是指從用戶輸入的數據中清除惡意數據,如清除用戶提交表單時的惡意的或錯誤的字符。

程序設計者必須對傳送到復雜的子系統(如命令外殼、關系型數據庫、購買的商業軟件組件)的所有數據進行“凈化”。攻擊者有可能通過使用 SQL 注入命令或其它注入攻擊來調用這些組件中沒有被使用的功能。這未必是輸入驗證問題,因為被調用的復雜的子系統并不理解調用過程中的前后關系。由于調用程序 理解前后關系,所以我們要在調用子系統之前對數據進行“凈化”。

八、實施深度防御

程序設計必須能夠利用多種防御策略來管理風險。只有這樣,才能在一層防御不夠用或失效時,另外一層防御可以防止將安全設計上的缺陷變成可被利用的漏洞,從而可以限制攻擊者利用漏洞的后果。例如,將安全編程技術與安全運行環境結合起來,可以減少在部署階段殘存在代碼中的漏洞被攻擊者在操作環境中利用的可能性。

九、使用有效的質量保證技術

良好的質量保證技術可以有效地確認和清除漏洞。模糊測試、滲透測試、源代碼審計等都可以結合起來使用,以此作為一個有效的質量保證項目的一部 分。獨立的安全檢查可以使系統更安全。有資質的外部審查人員可以提供獨立的觀點,例如,外部人員有助于確認和糾正一些錯誤的設想。

當然,為保證代碼的安全,企業應當為開發語言和平臺制定并實施一套健全的編碼標準。

轉載于:https://www.cnblogs.com/zlhff/p/5443988.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374749.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HDU 2897

Problem Description當日遇到月,于是有了明。當我遇到了你,便成了侶。那天,日月相會,我見到了你。而且,大地失去了光輝,你我是否成侶?這注定是個凄美的故事。(以上是廢話&#xff09…

力扣合并兩個有序數組

題目:給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。 請你 合并 nums2 到 nums1 中,使合并后的數組同樣按 非遞減順序 排列。 注意:最終&#…

Google Guava庫必需品

我希望代碼簡單,短而又易于閱讀。 不必要的復雜性分散了人們對真實情況的理解,使他們難以理解,并且可能成為生產力的真正殺手。 您知道,纏結的for循環和索引可以跟蹤是否/其他情況和切換用例,空/驗證檢查,轉…

單調棧3_水到極致的題 HDOJ4252

A Famous City 題目大意 給出正視圖 每一列為樓的高度 最少有幾座樓 坑點 樓高度可以為0 代表沒有樓 貢獻了兩發RE 原因 if(!s.empty()&&tem){s.push(tem); continue;}并不能篩去 空棧且 tem為0的情況 改為 if(!s.empty()){if(tem) s.push(tem); continue;} 后AC 題目…

eclipse配置遠程調試

一、配置 1、cd apache-tomcat/bin 2、vi startup.sh文件 3、在文件開頭處,添加下方代碼(address代表的是調試端口) declare -x CATALINA_OPTS"-Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:servery,transportdt_socket,suspendn,address…

力扣兩數之和 II - 輸入有序數組

題目:給定一個已按照 非遞減順序排列 的整數數組 numbers ,請你從數組中找出兩個數滿足相加之和等于目標數 target 。 我的代碼: 對撞指針 class Solution {public int[] twoSum(int[] numbers, int target) {int low 0;//指向頭int high numbers.le…

SpringMVC 3 Tiles 2.2.2集成教程

Apache Tiles是基于Java的Web應用程序的流行且最常用的模板框架。 由于Struts 1.x使用Tiles作為其默認模板框架,因此Tiles變得更加流行。 SpringMVC是一個MVC框架,例如Struts ,也支持將Tiles集成為其模板框架。 讓我們看看如何集成SpringMVC和…

[團隊項目3.0]Scrum團隊成立

Scrum團隊成立 5.Scrum團隊成立 5.1 團隊名稱,團隊目標、團隊口號、團隊照; 5.2 角色分配 產品負責人: 決定開發內容和優先級排序,最大化產品以及開發團隊工作的價值。 Scrum Master: 負責確保團隊遵循 Scrum 的理論、實踐和規則。…

Base64編碼的java實現

Java本身是提供了Base64編碼的工具包的,做項目的時候自己實現了個,在這里記錄一下: 1 /** Base64編碼數組 */2 private static final String base64EncodeChars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456…

Character.isLetterOrDigit(ch)判斷ch是否為字母或數字

Character.isLetter(ch) 判斷ch是否為字母 Character.isDigit(ch) 判斷ch是否為數字 Character.isLetterOrDigit(ch) 判斷ch是否為字母或數字 /* 例子*/char ch q;System.out.println(Character.isLetter(ch));System.out.println(Character.isDigit(ch));System.out.print…

高級SmartGWT教程,第1部分

賈斯汀(Justin),帕特(Pat)和我已經開始著手一個需要用戶界面進行管理和管理的副項目。 在與SmartGWT和GWT共同工作了一段時間之后,我們決定使用SmartGWT創建接口。 我們非常喜歡視覺組件(請查看…

git 技巧

將某個文件回退到某個版本 git co d359624286d9c1f022b8b3b6f2d3fe3b6524188b build.sh 查看某個文件在某個版本時的內容 git show d359624286d9c1f022b8b3b6f2d3fe3b6524188b:build.sh 如果想把這個文件重命名保存 git show d359624286d9c1f022b8b3b6f2d3fe3b6524188b:build.s…

機會

民生電商的機會.地點在成都. 聯系 :iskall0 at 163.com 待遇 :和BAT差不多. H5方向: 前端功底扎實.對H5有較深的理解和造詣.大數據方向1: SSH玩的熟.linux玩的熟.熟悉云計算架構和SOA.MySQL玩的熟,PostgreSQL加分 : ]熟Hadoop、St…

力扣驗證回文串

給定一個字符串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫 代碼思路:將s中的每個字符用for循環取出,判斷一下,如果是字母或者數字,插入到StringBuffer類型sgood中&#xf…

Spring MVC3 Hibernate CRUD示例應用程序

學習從HelloWorld應用程序開始的任何Web框架都是一個好主意。 一旦我們熟悉了框架配置,最好做一個CRUD(創建,讀取,更新,刪除)應用程序,該應用程序涵蓋Web框架的各個方面,例如驗證&am…

Linux Mint---ATI顯卡驅動安裝篇

顯卡驅動可謂是至關重要,當時折騰debian驅動的時候可是弄了好幾天才搞定的,現在卻非常容易就是裝上, 詳見這篇博客:http://www.yyearth.com/article/14-03/amd13.html 在此表示感謝! 我的話,全在圖形界面下…

百度云推送的簡單集成

1.在百度云推送的應用管理頁面,創建自己的應用,創建應用時,需要提供兩個證書,開發環境的推送證書和正式環境的推送證書。證書的格式是pem格式的,需要先在apple 開發者中心配置好推送證書,安裝到mac上&#…

高級SmartGWT教程,第2部分

這是我的教程的第二部分,有關使用SmartGWT快速進行UI開發。 在本教程的第一部分中 ,我們創建了基本的界面布局并添加了一些基本組件。 現在是時候解決這個問題,并使用SmartGWT的真正功能了。 在繼續之前,讓我們記住到目前為止我們…

有感而發,生活

我們每一個人都是獨一無二的,當然我們每一個人的路子也是不盡相同的,不能因為一時的失意而放棄了自己兒時的夢想,路是一步一步走的,未來需要努力,我相信 我們每一個人都可以做到自己心中的樣子,安逸的生活是…

力扣反轉字符串中的元音字母

給你一個字符串 s ,僅反轉字符串中的所有元音字母,并返回結果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小寫兩種形式出現。 代碼思路: 1.將字符串轉換為字符數組 2.設置碰撞指針,從兩頭尋…