發現一款牛逼的 IDEA 插件:檢測代碼漏洞,一鍵修復!

點擊關注公衆號,Java乾貨 及時送達

本插件作爲Java項目靜態代碼安全審計工具,側重於在編碼過程中發現項目潛在的安全風險,並提供一鍵修復能力。

本插件利用IDEA原生Inspection機制檢查項目,自動檢查當前活躍窗口的活躍文件,檢查速度快,佔用資源少。

插件提供的規則名稱均以"Momo"開頭。

版本支持

Intellij IDEA ( Community / Ultimate )  >= 2017.3

IDEA 香是香,可能你會說用它要收費,其實它也有開源的社區版本,收費的專業版也很容易申請到激活碼,關注公衆號Java技術棧,回覆:IDEA,可以閱讀我分享過的獲取正版 IDEA 激活碼的教程,很多粉絲都反饋說輕鬆得到了,感興趣的都可以去申請,不能太容易了。

安裝使用

IDEA插件市場搜索"immomo"安裝。

效果展示

演示一:XXE漏洞發現與一鍵修復

演示二:Mybatis XML Mapper SQL注入漏洞發現與一鍵修復

插件規則

編號 規則名稱 修復建議 一鍵修復
1001 多項式拼接型SQL注入漏洞 T
1002 佔位符拼接型SQL注入漏洞 T
1003 Mybatis註解SQL注入漏洞 T T
1004 Mybatis XML SQL注入漏洞 T T
1005 RegexDos風險 T T
1006 Jackson反序列化風險 T T
1007 Fastjson反序列化風險 T T
1008 Netty響應拆分攻擊 T T
1009 固定的隨機數種子風險 T T
1010 XXE漏洞 T T
1011 XStream反序列化風險 T T
1014 脆弱的消息摘要算法 T
1015 過時的加密標準 T
1016 XMLDecoder反序列化風險 T
1017 LDAP反序列化風險 T T
1018 寬泛的CORS Allowed Origin設置 T
1019 SpringSecurity關閉Debug模式 T T
1020 硬編碼憑證風險 T
1021 "@RequestMapping" 方法應當爲 "public" T T
1022 Spring 會話固定攻擊風險 T T
1023 不安全的僞隨機數生成器 T T
1024 OpenSAML2 認證繞過風險 T T
1025 IP地址硬編碼 T

項目結構

src
├── main
│   ├── java
│   │   └── com
│   │       └── immomo
│   │           └── momosec
│   │               ├── aspect
│   │               ├── entity
│   │               ├── fix
│   │               ├── lang
│   │               │   ├── java
│   │               │   │   ├── rule
│   │               │   │   │   └── momosecurity
│   │               │   │   │       └── {InspectionName}.java
│   │               │   │   └── utils
│   │               │   └── xml
│   │               │       └── rule
│   │               │           └── momosecurity
│   │               │               └── {InspectionName}.java
│   │               └── utils
│   └── resources
│       ├── META-INF
│       │   ├── description.html
│       │   ├── pluginIcon.svg
│       │   └── plugin.xml
│       └── inspectionDescriptions
│           └── {InspectionName}.html
└── test
    ├── java
    │   └── com
    │       └── immomo
    │           └── momosec
    │               └── lang
    │                   ├── java
    │                   │   ├── fix
    │                   │   └── rule
    │                   │       └── momosecurity
    │                   │           └── {InspectionName}Test.java
    │                   └── xml
    │                       └── rule
    │                           └── momosecurity
    │                               └── {InspectionName}Test.java
    ├── resources
    └── testData
        └── lang
            ├── java
            │   └── rule
            │       └── momosecurity
            │           └── {InspectionName}
            │               └──...
            └── xml
                └── rule
                    └── momosecurity
                        └── {InspectionName}
                            └──...

腳手架

# 新增檢查規則
> python script/addInspection.py

# 刪除檢查規則
> python script/deleteInspection.py

單元測試

> ./gradlew :test

預發佈打包

  1. PLUGIN_BAN_CONST=true ./gradlew --no-daemon clean build -PMOMO_CODE_SEC_INSPECTOR_ENV=pre
  2. build/distributions/*.zip 爲待發布插件

預發佈情況下,插件上報地址寫於src/main/resources/properties/pre.properties

發佈打包

  1. PLUGIN_BAN_CONST=true ./gradlew --no-daemon clean build -PMOMO_CODE_SEC_INSPECTOR_ENV=prod
  2. build/distributions/*.zip 爲待發布插件

正式發佈情況下,插件上報地址寫於src/main/resources/properties/prod.properties

注意事項

  • 分支命名規則:

以版本號命名的分支,原則上代表支持的idea版本下限。

如branch爲2018.3代表當前分支支持版本範圍是>=2018.3 (或說from 183.* to *)。

插件具體支持idea版本範圍見gradle.propertiesidea_since_buildidea_until_build部分。

  • 插件版本號命名規則:

原則上,插件版本號以支持的idea版本下限爲大版本編號。

如插件當前版本爲x.1x爲開發時所用IDEA版本編號,.1爲插件發佈版本。

需要注意的是,因IDEA更新機制問題,插件新版本號只能向上增長

具體見gradle.propertiesplugin_version字段。

  • 版本號對應關係
分支名 插件版本 IDEA版本
2018.3 193 2018.3.* <= x
2017.3 173 2017.3.* <= x <= 2018.2.*
  • JetBrains Plugins Marketplace 版本

發佈到插件市場的版本不支持漏洞上報功能。

發佈到插件市場的版本不支持白名單簽名下發功能。

開源地址:https://gitee.com/mirrors/momo-code-sec-inspector-java






關注Java技術棧看更多幹貨



戳原文,獲取精選面試題!

本文分享自微信公衆號 - Java技術棧(javastack)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章