一、關閉swagger
1、關閉swagger v3
# 需同時設置auto-startup=false,否則/v3/api-docs等接口仍能繼續訪問
springfox:documentation:enabled: falseauto-startup: falseswagger-ui:enabled: false
2、關閉swagger v2
# 只要不是true就不啟用
swagger:enable: false
# 如不起作用,查看項目中的config,是否配置開關
@Configuration
@EnableSwagger2
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.xxx.controller")).paths(PathSelectors.any()).build();}//構建 api文檔的詳細信息函數,注意這里的注解引用的是哪個private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Swagger2 構建RESTful API").description("API 描述").contact(new Contact("xx", "", "xx@xxx.com")).version("1.0") .build();}}
二、關閉SpringBoot actuator
management.endpoints.enabled-by-default = false
三、HTTP頭信息泄露
為了隱藏這些不必要的頭信息,有各種可能的方法:
??? 1.如果是經源代碼編譯而來的,可改源代碼中的版本信息,具有一定的難度;
??? 2.通過配置對版本信息進行修改或者不顯示,達到以假亂真的目的,比較簡單;
??? 3.在服務器前加上反向代理軟件,過濾掉這些會顯示服務器版本信息的頭,有些復雜。
以下主要就第2種方法,分別介紹一下常用的Web服務器如何去掉或修改Server頭信息。
1>.Apache Web服務器版本號隱藏
# 找到配置文件apache2.conf或httpd.conf,修改其中的標記為:
ServerTokens ProductOnly
ServerSignature Off# 重啟apache服務
# curl -I localhost
HTTP/1.1 200 OK
Server: Apache
Accept-Ranges: bytes
Content-Length: 97
Connection: close
Content-Type: text/html
2>.Nginx服務器版本號隱藏
# 修改nginx.conf
# 在其中的http節加上server_tokens off;
http {……省略配置sendfile on;tcp_nopush on;keepalive_timeout 65;tcp_nodelay on;server_tokens off;…….省略配置
}
# 重啟Nginx后測試
四、敏感信息明文傳輸
1.網站負責人將網站地址提交到Gworg進行SSL證書認證。
2.然后將SSL證書配置到網站,并且開啟強制HTTPS訪問。
3.查看網站源碼是否存在http地址調用的資源,例如:圖片、視頻、CSS、JS代碼等,將這些代碼地址改成https或者下載到本地網站服務器調用。
4.對于敏感信息,例如密碼、秘鑰進行加密;例如:前端md5加密傳給服務端,服務端再次md5加密存入數據庫;
五、重放攻擊
短信轟炸
暴力破解
重放支付
如何防御
加隨機數
加時間戳
加流水號
其他方法
1)挑戰/應答:每次數據傳輸時,發送端都給接收端發送一個不同的“挑戰”字串,接收端收到這個“挑戰”字串后,做出相應的“應答”。
2)一次性口令:每次數據傳輸時,發送端都給接收端發送一個不同的“口令”,通信雙方通過消息中的口令來判斷消息的新鮮性。
3)頁面可以編寫防重復提交、后端自定義注解防止表單重復提交(RepeatableFilter);

六、敏感信息泄漏
1.不當的日志記錄:如果日志文件中包含了敏感數據,比如用戶密碼、身份證號碼等,且這些日志文件未經適當的保護,那么黑客可以隨意訪問這些文件來獲取敏感數據
2.SQL注入攻擊:如果應用程序的數據庫查詢語句是通過拼接字符串的方式構建的,存在SQL注入的風險。黑客可以通過輸入特殊字符來修改或者獲取數據庫中的數據。
3.不正確的加密和解密:如果應用程序使用不安全的加密算法,或者密鑰管理不當,黑客可以通過解密數據來獲取敏感信息。
解決方案:
1.應用程序層面的解決方案
? a. 合理使用訪問控制機制:對敏感數據的訪問進行嚴格的認證和授權,確保只有授權用戶能夠訪問敏感數據。
? b. 數據存儲安全:將敏感數據以加密形式存儲,確保數據在存儲過程中不被黑客獲取。
? c. 前端安全:編寫安全的前端代碼,對用戶輸入進行有效的驗證和過濾,防止惡意代碼注入。
? d. 安全的數據傳輸:使用安全的傳輸協議(如HTTPS)來傳輸敏感數據,確保數據在傳輸過程中不被黑客截取。
2.數據庫層面的解決方案
? a. 使用參數化查詢或預編譯語句:確保輸入的數據能夠正確轉義,防止SQL注入攻擊。
? b. 數據庫訪問控制:對數據庫的訪問進行嚴格的認證和授權,只允許授權用戶訪問敏感數據。
? c. 定期備份和監控數據庫:確保數據庫備份完整可用,及時發現和處理異常訪問行為。
3.加密和解密層面的解決方案
? a. 使用安全可靠的加密算法:確保加密算法足夠強大,如AES、RSA等。
? b. 密鑰管理:妥善管理密鑰,確保密鑰不泄露,定期更換密鑰以提高安全性。
實戰:
XssFilter 過濾sql參數;
七、賬號枚舉漏洞
1.對接口登錄頁面的判斷回顯提示信息修改為一致:賬號或密碼錯誤(模糊提示);不要精確報賬號不存在、密碼錯誤等提示語。
2.增加動態驗證碼機制,避免被探測工具批量枚舉用戶名。
八、CORS 信任任意來源漏洞
1?? 如果返回頭是以下情況,那么就是高危漏洞,這種情況下漏洞最好利用:
Access-Control-Allow-Origin: https://www.attacker.com
Access-Control-Allow-Credentials: true
?2?? 如果返回頭是以下情況,那么也可以認為是高危漏洞,只是利用起來麻煩一些:
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
?3?? 如果返回以下,則不存在漏洞,因為Null必須是小寫才存在漏洞:
Access-Control-Allow-Origin: Null
Access-Control-Allow-Credentials: true
?4?? 如果返回以下,可認為不存在漏洞,因為CORS安全機制阻止了這種情況下的漏洞利用,也可以寫上低危的CORS配置錯誤問題。
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
?5?? 如果返回以下,可認為不存在漏洞,也可以寫上低危的CORS配置錯誤問題。
Access-Control-Allow-Origin: *
解決辦法:
1. Access-Control-Allow-Origin中指定的來源只能是受信任的站點,避免使用Access-Control-Allow-Origin: *,避免使用Access-Control-Allow-Origin: null,否則攻擊者可以偽造來源請求實現跨域資源竊取。
2. 嚴格校驗“Origin”值,校驗的正則表達式一定要編寫完善,避免出現繞過的情況。
3. 減少“Access-Control-Allow-Methods”所允許的請求方法。
4. 除了正確配置CORS之外,Web服務器還應繼續對敏感數據進行保護,例如身份驗證和會話管理等。
5.后端服務禁止使用下邊代碼,使用nginx代理配置跨域:
@Beanpublic CorsFilter corsFilter(){UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);// 設置訪問源地址config.addAllowedOrigin("*");// 設置訪問源請求頭config.addAllowedHeader("*");// 設置訪問源請求方法config.addAllowedMethod("*");// 對接口配置跨域設置source.registerCorsConfiguration("/**", config);return new CorsFilter(source);}
九、未授權訪問
【網絡安全】常見未授權訪問漏洞匯總
十、默認口令漏洞
所有中間件、組件密鑰都不得使用默認,修改為復雜的隨機密碼;
后端對新增、修改密鑰前,可以加入PasswordCheckUtil,進行復雜校驗:
檢測密碼中字符長度檢查密碼中是否包含數字檢查密碼中是否包含字母(不區分大小寫)檢查密碼中是否包含特殊字符鍵盤規則匹配器 橫斜向規則檢測評估a-z,z-a這樣的連續字符評估aaaa, 1111這樣的相同連續字符檢測常用詞庫用戶名校驗(LeetSpeak字符)