成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過Inspection機制,對靜態(tài)代碼安全審查

安全 應(yīng)用安全
本章節(jié)我們學習了如何使用 IDEA 原生 Inspection 檢查機制,擴展我們自己需要添加的代碼檢測邏輯,以及使用 LocalQuickFix 的實現(xiàn)類,做代碼的替換和引入響應(yīng)包的操作。

[[442105]]

一、前言

真能鬧,怕喇喇蛄,還不種稻子了?

喇喇蛄,是東北的一種害蟲,經(jīng)常在種水稻的季節(jié),在池埂子上盜洞,導(dǎo)致稻田里的水悄悄的流沒了,影響稻苗發(fā)育。

后來發(fā)現(xiàn)原來寫代碼,也能碰見“蝲蝲蛄”,無論你寫的是什么功能、哪種技術(shù)、作何目的,蝲蝲蛄總能給盜幾個洞出來。“你這已經(jīng)有其他的某某了你怎么還造輪子”、“你這方案不行程序員不要浪費時間”、“也沒看出來你這有啥優(yōu)勢和價值呀怎么給業(yè)務(wù)賦能”,這種話聽上去“賊”有道理,吹的叮當?shù)模屗プ鲇帜芨愕南〉哪业摹?/p>

所以,遠離蝲蝲蛄,做你想做的、搞你想搞的、學你想學的,知識是不斷沉淀的積累、方案是積累后的創(chuàng)造。

二、需求目的

怎么辦,都有標準的研發(fā)規(guī)范,但還是沒法控制住到具體的每個研發(fā)下,給寫出什么代碼了。

有時候標準只是文檔,看和執(zhí)行的這個過程中就會一定的轉(zhuǎn)行失效性,你可能會想加手段;評審、扣錢、罰績效、檢討等等,但這樣可能還只是增加過程成本,最終效果也不會太好。不太可能一個寫代碼還得配一個保姆,所以就像 p3c、pmd-idea,這樣的插件出來了,幫助程序員把代碼寫好,治理掉一些不合標準的問題代碼。

那么,你好奇這個事是怎么干的嗎,怎么你就在 IDEA 寫代碼,它就能給你檢測出來,告訴你有問題,并提醒你修改以及有些還可以一鍵幫助你修改呢?那如果你想再增加點你們公司個性的要求的時候,怎么擴展呢?本章節(jié)我們就使用 IDEA 插件開發(fā)能力,把這個事辦嘍

三、案例開發(fā)

1. 工程結(jié)構(gòu)

  1. guide-idea-plugin-pmd 
  2. ├── .gradle 
  3. └── src 
  4.     ├── main 
  5.     │   └── java 
  6.     │    └── cn.bugstack.guide.idea.plugin  
  7.     │        ├── rule 
  8.     │        │   ├── FastJsonAutoType.java 
  9.     │        │   ├── HardcodedIp.java     
  10.     │        │   └── ReplacePseudorandomGenerator.java          
  11.     │        └── utils    
  12.     │            └── InspectionBundle.java     
  13.     ├── resources 
  14.     │   ├── inspectionDescriptions 
  15.     │   │   ├── FastJsonAutoType.html 
  16.     │   │   ├── HardcodedIp.html   
  17.     │   │   └── ReplacePseudorandomGenerator.html    
  18.     │   └── META-INF 
  19.     │       └── plugin.xml  
  20.     ├── build.gradle   
  21.     └── gradle.properties 

在此 IDEA 插件工程中,主要分為3塊區(qū)域:

  • rule:規(guī)則配置區(qū)域,以繼承 IDEA 原生 Inspection 檢查類,擴展自身需要掃描的代碼片段,進行警告、注釋、修復(fù)。
  • inspectionDescriptions:是對應(yīng)的警告注釋,編寫到 html 中,最終展示到 IDEA 下對應(yīng)的問題代碼片段上。
  • plugin.xml:中需要配置 localInspection 也就是配置你自定義的代碼檢測實現(xiàn)類。

2. 偽隨機數(shù)檢測

目的:把代碼中的 new Random 不安全偽隨機數(shù)警告并提供修復(fù),處理為 new SecureRandom

RandomRule

  1. PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); 
  2. typeElement.replace(factory.createTypeElementFromText("SecureRandom"null)); 
  3. PsiNewExpression secureNewExp = (PsiNewExpression) factory.createExpressionFromText("new SecureRandom()"null); 
  4. newExp.replace(secureNewExp); 
  • 通過繼承 AbstractBaseJavaLocalInspectionTool Override buildVisitor 方法,擴展檢測代碼。當你寫了這段方法后,IDEA 會把一行行的代碼都通過這個方法傳進來
  • 在 visitNewExpression 方法中擴展自身的檢測處理,遇到了哪種代碼片段,要提供什么樣的提醒以及提醒的級別,最后是提供一個 Fix 修復(fù)能力,這個修復(fù)能力就在替換這段代碼片段,通過還可以操作引入新包的動作 import xxx

3. FastJson檢測

目的:com.alibaba:fastjson 在開啟 AutoTypeSupport 時,存在反序列化風險。如果程序中有 ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 代碼直接提醒刪除處理。

  1. public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { 
  2.     return new JavaElementVisitor() { 
  3.         @Override 
  4.         public void visitMethodCallExpression(PsiMethodCallExpression expression) { 
  5.             if (hasFullQualifiedName(expression, "com.alibaba.fastjson.parser.ParserConfig""setAutoTypeSupport")) { 
  6.                 PsiExpression[] args = expression.getArgumentList().getExpressions(); 
  7.                 if (args.length == 1 && 
  8.                         args[0] instanceof PsiLiteralExpression && 
  9.                         Boolean.TRUE.equals(((PsiLiteralExpression) args[0]).getValue()) 
  10.                 ) { 
  11.                     holder.registerProblem( 
  12.                             expression, 
  13.                             "FastJson unserialization risk"
  14.                             ProblemHighlightType.GENERIC_ERROR_OR_WARNING, 
  15.                             new DeleteElementQuickFix(expression, "!Fix: remove setAutoTypeSupport"
  16.                     ); 
  17.                 } 
  18.             } 
  19.         } 
  20.     }; 

整個對代碼檢測的操作基本都是類似的,這個無非也是檢測出代碼庫,并進行刪除的提醒處理 DeleteElementQuickFix

4. 提醒模板

  1. <html> 
  2. <body> 
  3. <b>小傅哥-提醒:</b> 不安全的偽隨機數(shù)生成器 <br> 
  4. <br> 
  5. <p>java.util.Random 依賴一個可被預(yù)測的偽隨機數(shù)生成器。</p> 
  6. <br> 
  7. <p style="font-size: 10px;color: #629460;">最佳實踐:</p> 
  8. <p style="font-size: 10px;">使用java.security.SecureRandom</p> 
  9. </body> 
  10. </html> 

 

 

 

提醒模板需要編寫 html 格式的內(nèi)容,這個內(nèi)容會被展示到錯誤代碼的詳情里。后面我們做測試的可以查看

5. 檢測配置

  1. <extensions defaultExtensionNs="com.intellij"
  2.     <localInspection 
  3.             language="JAVA"       groupPath="Java" 
  4.             groupName="X-PMD"   enabledByDefault="true"   level="ERROR" 
  5.             bundle="InspectionBundle"     key="replace.pseudorandom.generator.name" 
  6.             implementationClass="cn.bugstack.guide.idea.plugin.rule.RandomRule" 
  7.     /> 
  8.      
  9.     <localInspection 
  10.             language="JAVA"       groupPath="Java" 
  11.             groupName="X-PMD"   enabledByDefault="true"   level="ERROR" 
  12.             bundle="InspectionBundle"     key="fastjson.auto.type.name" 
  13.             implementationClass="cn.bugstack.guide.idea.plugin.rule.FastJsonRule" 
  14.     /> 
  15.      
  16.     <localInspection 
  17.             language="JAVA"      groupPath="Java" 
  18.             groupName="X-PMD"  enabledByDefault="true"     level="WARNING" 
  19.             bundle="InspectionBundle"     key="hardcoded.ip.name" 
  20.             implementationClass="cn.bugstack.guide.idea.plugin.rule.IPRule" 
  21.     /> 
  22. </extensions> 

 

在 plugin.xml 中配置我們自己開發(fā)好的代碼靜態(tài)檢測對象,這樣你的檢測類就生效了。

四、測試驗證

啟動插件

如果你下載代碼后,沒有 Plugin 可以自己配置一下,在 Tasks 中配置 :runIde

錯誤提醒

錯誤詳情

當你點擊 Fix,那么接下來就可以進行自動替換代碼并修復(fù)了,就是把 Random random = new Random() 替換為 SecureRandom random = new SecureRandom();

其他2個也可以在獲取代碼后進行測試驗證,一個是IP,另外一個是使用 ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 的錯誤提醒。

五、總結(jié)

 

  • 本章節(jié)我們學習了如何使用 IDEA 原生 Inspection 檢查機制,擴展我們自己需要添加的代碼檢測邏輯,以及使用 LocalQuickFix 的實現(xiàn)類,做代碼的替換和引入響應(yīng)包的操作。
  • 另外對于代碼檢測,還有一個更加標準的工具叫 PMD 它是一款采用 BSD 協(xié)議的代碼檢查工具,你可以擴展實現(xiàn)為自己的標準和規(guī)范以及完善個性的提醒和修復(fù)操作。
  • 像 p3c 就是一款靜態(tài)代碼檢測工具,用的人也非常多,不過它的插件開發(fā)不是基于 Java 實現(xiàn)的,代碼開發(fā)上也并沒有一些注釋。所以非常建議閱讀 pmd-idea,這款代碼寫的非常好,抽象充足、結(jié)構(gòu)清晰、內(nèi)容完整:https://github.com/ybroeker/pmd-idea

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關(guān)推薦

2021-11-04 05:43:38

GoKartGo代碼靜態(tài)安全分析

2013-02-27 10:11:06

代碼審查ThoughtBot

2010-10-08 10:42:30

2012-08-09 09:10:56

代碼審查代碼

2012-11-22 09:51:14

2012-03-15 16:52:39

JavaCodePro Ana

2020-09-25 22:14:22

TikTok程序禁令

2014-03-18 10:08:35

2019-11-21 10:29:24

中科曙光

2013-10-24 09:43:58

代碼代碼審查

2014-03-06 09:43:54

代碼編程習慣

2012-07-05 09:45:02

代碼審查

2014-10-29 13:52:38

程序員

2018-08-09 11:09:11

云安全

2014-05-23 16:19:26

網(wǎng)絡(luò)安全審查網(wǎng)絡(luò)安全

2012-05-17 09:28:06

代碼審查Java代碼

2023-05-23 11:45:43

2010-07-08 14:13:58

UML靜態(tài)建模

2023-09-11 08:00:00

代碼審查開發(fā)

2009-08-05 09:59:40

Code Review代碼審查工具
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 色在线免费视频 | 欧美精品在线一区 | 国产精品高清在线 | 亚洲成人免费观看 | 国产精品a久久久久 | 亚洲精品久久久久久国产精华液 | 我想看一级黄色毛片 | 色姑娘综合网 | av影音在线 | 欧美xxxx日本| 黄色毛片免费看 | 精品毛片在线观看 | 欧美11一13sex性hd | 国产日韩精品久久 | 国产精品v | 日韩视频一区在线观看 | 五十女人一级毛片 | 午夜欧美 | 国产免费一二三区 | 亚洲国产成人久久久 | 在线一区视频 | 四虎影院一区二区 | 9999在线视频 | 国产三级一区二区 | 一级片毛片 | 91亚洲精华国产 | 91在线免费观看网站 | 欧美精品综合在线 | 国产成人精品免费视频大全最热 | 亚洲成人一级片 | 欧美日韩国产一区二区三区 | 久久久不卡网国产精品一区 | 日日综合| 国产在线视频在线观看 | 亚洲一区亚洲二区 | 美女久久视频 | 国产精品一区二区电影 | 亚洲不卡在线观看 | 99久久精品免费视频 | 欧美在线观看一区二区 | 日韩成人免费视频 |