修復Sonar中常見的Java安全代碼沖突

本文旨在向您展示如何快速修復最常見的Java安全代碼沖突。 它假定您熟悉代碼規則和違規的概念以及Sonar如何對其進行報告。 但是,如果您以前從未聽說過這些術語,則可以閱讀Sonar Concepts或即將出版的有關Sonar的書 ,以獲取更詳細的解釋。

為了獲得一個想法,在Sonar分析期間,您的項目會被許多工具掃描,以確保源代碼符合您在質量配置文件中創建的規則。 每當違反規則時…就會引發違反。 使用Sonar,您可以通過違規深入視圖或在源代碼編輯器中跟蹤這些違規。 有數百條規則,根據其重要性進行分類。 在以后的文章中,我會盡我所能覆蓋盡可能多的內容,但現在讓我們來看一些常見的安全規則/違規行為。 我們現在要檢查兩對規則(在Sonar中它們都被列為關鍵)。

1.數組直接存儲( PMD ),方法返回內部數組( PMD )

當內部數組存儲或直接從方法返回時,會出現這些沖突。 以下示例說明了違反這些規則的簡單類。

public class CalendarYear {private String[] months;public String[] getMonths() {return months;    }public void setMonths(String[] months) {this.months = months;}
}

要消除它們,您必須在存儲/返回它之前克隆Array,如以下類實現所示,因此沒有人可以修改或獲取您類的原始數據,而只能修改它們的副本。

public class CalendarYear {private String[] months;public String[] getMonths() {return months.clone();    }public void setMonths(String[] months) {this.months = months.clone();}
}


2.傳遞給SQL語句( findbugs )上的execute方法的非恒定字符串,并從非恒定String (findbugs )生成準備好的語句

使用JDBC庫時,這兩個規則都與數據庫訪問有關。 通常,有兩種方法可以通過JDBC連接執行SQL Commants:Statement和PreparedStatement。 關于優缺點,有很多討論,但這超出了本文的范圍。 讓我們看看如何根據以下源代碼片段引發第一次違規。

Statement stmt = conn.createStatement();
String sqlCommand = 'Select * FROM customers WHERE name = '' + custName + ''';
stmt.execute(sqlCommand);

您已經注意到傳遞給execute方法的sqlcommand參數是在運行時動態創建的,此規則不接受。 類似情況會導致第二次違規。

String sqlCommand = 'insert into customers (id, name)  values (?, ?)';
Statement stmt = conn.prepareStatement(sqlCommand);

您可以通過三種不同的方法來克服此問題。 您可以使用StringBuilder或String.format方法來創建字符串變量的值。 如果適用,可以在類聲明中將SQL Commands定義為Constant,但這僅適用于不需要在運行時更改SQL Command的情況。 讓我們使用StringBuilder重新編寫第一個代碼段

Statement stmt = conn.createStatement();
stmt.execute(new StringBuilder('Select FROM customers WHERE name = '').append(custName).append(''').toString());

并使用String.format

Statement stmt = conn.createStatement();
String sqlCommand = String.format('Select * from customers where name = '%s'', custName);
stmt.execute(sqlCommand);

對于第二個示例,您可以僅聲明sqlCommand,如下所示

private static final SQLCOMMAND = insert into customers (id, name)  values (?, ?)';

還有更多安全規則,例如阻止程序Hardcoded常量數據庫密碼,但是我認為沒有人仍然在源代碼文件中對密碼進行硬編碼…

在接下來的文章中,我將向您展示如何遵守性能和不良實踐規則。 在此之前,我一直在等待您的意見或建議。

祝您編程愉快,別忘了分享!

參考:在Only Only軟件問題博客上,從我們的JCG合作伙伴 Papapetrou P. Patroklos 修復了Sonar中常見的Java安全代碼沖突 。


翻譯自: https://www.javacodegeeks.com/2012/09/fixing-common-java-security-code.html

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

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

相關文章

理解ThreadLocal

ThreadLocal:線程本地存儲,為每個線程都創建了變量的副本,線程在訪問變量時,可以直接訪問自己內部的副本變量。 理解幾個概念: 在java中ThreadLocal是一個類。 ThreadMap是一個類, Thread類是線程類。 ThreadLocal…

抖音右上角一個小黃點是什么_抖音官方入駐視頻號,釋放了一個什么樣的信號?...

專注視頻號觀察第 328 篇這幾天,視頻號生態新入駐了一個企業號,在圈里引起不少的轟動,因為這個號的名字叫做———抖音。這件事在圈里引發不少的轟動,很多人驚嘆:“連抖音都來開視頻號了,你還在等什么&…

資源包技巧和最佳實踐

今天是資源捆綁日。 通常,這是Java中最著名的國際化機制(i18n)。 使用它應該很容易。 但是,在弄臟手時會出現許多小問題。 如果您有相同的想法,則此文章適合您。 基本 java.util.ResourceBundle定義了用于訪問Java中翻…

springMvc-文件上傳

趕時間&#xff0c;又在寫垃圾博客&#xff0c;在心里給自己一耳巴 1.單文件上傳 2.多文件上傳 代碼&#xff1a; 頁面&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"><title>Insert title here</title></he…

c cuda 指定gpu_GPU并行編程:熟練使用CUDA C語言

【IT168 專稿】一個大任務通常可能被分解成許多可以一起處理的小任務&#xff0c;以便創建一個解決方案&#xff0c;這和粉刷房子的道理是一樣的&#xff0c;在粉刷之前&#xff0c;假設你需要買5公升油漆和5把刷子&#xff0c;你可以自己一個人干完采購和粉刷的活&#xff0c;…

js中使用0 “” null undefined {}需要注意

注意&#xff1a;在js中0為空&#xff08;false&#xff09; &#xff0c;代表空的還有“”&#xff0c;null &#xff0c;undefined&#xff1b; 如果做判斷if(&#xff01;上面的四種值)&#xff1b;返回均為false console.log(!null);// true console.log(!0);//true consol…

PhpStorm 10.0.3破解版下載

漢化破解版軟件下載&#xff1a; http://pan.baidu.com/s/1geNO24r 密碼: d5ci 這個漢化破解軟件解決了大綱視圖里空白的問題。 先安裝騰訊電腦管家&#xff0c;然后安裝這個軟件&#xff0c;安裝到最后提示有個文件有病毒已刪除&#xff0c;點確定后正常使用。轉載于:https://…

Jenkins:部署JEE工件

隨著持續集成和持續交付的出現 &#xff0c;我們的構建被分為不同的步驟&#xff0c;以創建部署管道。 這些步驟中的一些步驟可以是例如編譯和運行快速測試&#xff0c;運行慢速測試&#xff0c;運行自動驗收測試或發布應用程序等。 部署流程的最后一步意味著將我們的產品&…

seafile 部署_Seafile開啟webdav及讀寫性能測試

為什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web應用&#xff0c;經過個人測試&#xff0c;同一臺機器上&#xff0c;seafile在傳輸文件時的速度比nextcloud要快&#xff08;可能也與php的設置有關系&#xff09;&#xff0c;這是seafile的優勢。但是&#xff0…

Python--校園網爬蟲記

查成績&#xff0c;算分數&#xff0c;每年的綜合測評都是個固定的過程&#xff0c;作為軟件開發者&#xff0c;這些過程當然可以交給代碼去做&#xff0c;通過腳本進行網絡請求獲取數據&#xff0c;然后直接進行計算得到基礎分直接填表就好了&#xff0c;查成績再手動計算既容…

Spring–添加SpringMVC –第1部分

歡迎來到本教程的第四部分。 在這一部分中&#xff0c;我們將使用Spring MVC編寫控制器和視圖&#xff0c;并考慮我們的REST模型。 我們必須做的第一件事&#xff0c;就是根據目前的情況制作一個Web應用程序。 我們將web / WEB-INF文件夾添加到我們的項目根目錄。 在WEB-INF內創…

[Linux] 權限與指令間的關系

我們知道權限對于使用者帳號來說是非常重要的&#xff0c;因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄&#xff01; 在這一章我們介紹了很多文件系統的管理指令&#xff0c;第五章則介紹了很多文件權限的意義。在這個小節當中&#xff0c; 我們就將這兩者結合起來…

access month函數用法_學會了這7個EXCEL日期函數技巧,老板再讓你加班,你找我!...

日期函數&#xff0c;常用年月日&#xff0c;時分秒&#xff0c;星期&#xff0c;季度&#xff0c;求差值等&#xff0c;學會以下幾個函數&#xff0c;老板再讓你加班&#xff0c;你找我&#xff01;1、記錄當前時間(不隨系統時間變化)NOW()函數與數據有效性結合&#xff0c;記…

css樣式表的選擇器與分類

css 樣式表的作用&#xff1a; 主要用于結構,樣式與行為,CSS主要的作用就是美化網頁的一個語言,它的特點: 1.結構與樣式分離的方式,便于后期維護與改版; 2.樣式定義精確到像素的級別; css樣式表的結構&#xff1a;CSS 稱為層疊樣式表 用于給網頁設置各種樣式 css樣式的語法由3部…

Spring 3.1緩存和@Cacheable

緩存在軟件領域已經存在很長時間了。 它們是那些真正有用的東西之一&#xff0c;一旦您開始使用它們&#xff0c;您會想知道如果沒有它們&#xff0c;您是如何相處的&#xff0c;所以似乎讓Spring的家伙們只是在版本中向Spring核心添加緩存實現有點奇怪。 3.1。 我猜想以前沒有…

pytorchyolov4訓練_使用pytorch-yolov5 訓練自己的數據集-2020.6.15

make yolov5 pytorch train datasets訓練所需環境 python3.5, pytorch1.3, torchvision 0.4.1 , tensorboard 1.14.0 , tensorflow-gpu1.14.0本例制作yolov5數據集 并進行數據訓練從VOC數據集轉為訓練所需的coco數據集代碼有待改進包含文件夾voc2coco/(Annotations/ JPEGImages…

meta 的作用 搜集

Meta標簽中的format-detection屬性及含義 format-detection翻譯成中文的意思是“格式檢測”&#xff0c;顧名思義&#xff0c;它是用來檢測html里的一些格式的&#xff0c;那關于meta的format-detection屬性主要是有以下幾個設置&#xff1a;<meta name"format-detecti…

Web服務安全性和SOA路線圖的人為維度

在大多數非平凡的SOA環境中&#xff0c;很難跟蹤系統之間不斷發展的集成&#xff0c;除非有明確的發布和查找適當信息的方法。 概述IT環境&#xff0c;定義當前或將要連接的內容&#xff0c;是維護環境的先決條件。 缺少這種情況通常會導致“面向意大利面條的環境”的感覺&…

pccad自定義圖框_(PCCAD自定義標題欄詳細方法.doc

PCCAD2011自定義標題欄詳細方法下面以圖3-1為例說明標題欄的自定義過程。圖3-11&#xff0e;新建文件(用New 命令)。2&#xff0e;用繪圖和文字中的相關命令設計出圖3-1所示的圖形。其中在使用中不變的內容&#xff0c;如廠名等均用“文字”命令標出&#xff0c;而需臨時填充的…

ThinkPHP 3.2.x 集成極光推送指北

3.2版本已經過了維護生命周期&#xff0c;官方已經不再維護&#xff0c;請及時更新至5.0版本 —— ThinkPHP 官方倉庫 以上&#xff0c;如果有條件&#xff0c;請關閉這個頁面&#xff0c;然后升級至 ThinkPHP 5&#xff0c;如果由于各種各樣的原因無法升級至 TP 5 &#xff0c…