教育部資安攻防演練弱點修補
可以的話,建議在程式碼方面做修復或者防堵,雖然防火牆是必須的,但是不代表只靠防火牆是安全的,防火牆是有機會可以被繞過的,因此,想要解決根本問題請盡量從修補程式碼或者相關設定檔做起。
教育體系資安攻防演練
網頁系統錯誤訊息顯示問題
如果輸入奇怪的字元在網頁任何可以送資料的參數裡,會造成錯誤訊息顯示的話,請設定能將錯誤訊息隱藏的功能。
錯誤訊息可以讓攻擊者獲取
網站的後端實體路徑資訊(寫後門時或者讀檔時可以被利用的資訊)
網頁服務的版本(可得知與目前最新版之間有存在那些漏洞可以利用)
phpinfo,server-info 處理方式
如果是下方圖片的那種頁面,移除顯示該頁面的文件即可
例如 http://ncku.edu.tw/phpinfo.php 的話,則移除phpinfo.php就好
如果是會洩漏網站相關資訊的頁面,如開發者資訊,開發時的測試網頁,程式碼,顯示網站當前狀態的系統資訊等等的頁面,應該要移除或者禁止瀏覽存取
XSS 攻擊
XSS (Cross-site scripting)
PHP的話可以用內建函數htmlspecialchars()來預防XSS
其他程式語言的話請另外去找相關函數框架或寫法。
輸入驗證:
對所有輸入數據進行嚴格的驗證,包括來自用戶的數據。確保只有符合預期格式的數據才能被接受。輸出編碼:
在將用戶輸入的數據插入到HTML、JavaScript、CSS或URL中之前,使用合適的輸出編碼方式。這可以通過內置函數(如PHP的htmlspecialchars())來實現,不要使用前端(如JavaScript)來阻擋,因為這是可以被繞過的。不要信任用戶輸入:
不要將用戶輸入視為可信任的。即使數據看起來無害,也應該經過適當的處理和編碼。避免使用innerHTML:
盡量避免使用innerHTML將用戶輸入的數據插入到HTML中,優先使用textContent或innerText。HTTP Only Cookie標誌:
將敏感信息存儲在帶有HTTP Only標誌的Cookie中,以防止客戶端JavaScript訪問它們。Content Security Policy(CSP):
實施CSP,限制允許加載的資源和執行的腳本。腳本過濾:
使用過濾器或WAF(Web應用程式防火牆)來檢測和過濾惡意腳本。這可以在應用程序層面捕捉和阻止XSS攻擊。字元過濾:
過濾特定特殊符號,但是過濾不乾淨可能依舊導致漏洞產生。
SQL injection 攻擊(SQL注入)
SQL injection
PHP的話可以用PDO框架來預防SQL injection。
其他程式語言的話請另外去找相關函數框架或寫法。
使用參數化查詢:
使用參數化查詢或預處理語句來處理SQL查詢,而不是將用戶輸入的數據直接插入到SQL語句中。這可以防止攻擊者通過操縱輸入來注入惡意SQL。使用ORM框架:
使用ORM(對象關係映射)框架,這些框架通常會自動處理參數化查詢,減少了SQL注入的風險。避免拼接SQL字符串:
絕對不要通過拼接用戶輸入的數據來構建SQL字符串。這是SQL注入的主要來源之一。請使用參數化查詢。最小特權原則:
為您的數據庫用戶授予最小的必要權限,以限制攻擊者在發生SQL注入時可以進行的操作。過濾和驗證輸入:
對用戶輸入的數據進行過濾和驗證,以確保它符合預期的格式和範圍。但不要依賴過濾和驗證來防止SQL注入,這只是一個額外的安全層。安全配置:
設置您的數據庫和Web伺服器以最大程度地減少攻擊面。關閉不必要的服務和功能,並確保安全性配置設置正確。使用Web應用程式防火牆(WAF):
使用WAF可以檢測和阻止SQL注入攻擊,作為額外的安全層。
Command injection 攻擊(命令/指令注入)
Command injection
不信任用戶輸入:
當處理用戶輸入時,始終不信任用戶提供的數據。
輸入驗證是防止命令注入的第一道防線。驗證輸入是否合法,並且僅接受預期的數據。使用參數化查詢:
在執行命令或SQL查詢時,使用參數化的方式,而不是將用戶輸入直接插入命令字符串中。
這可以防止攻擊者將恶意命令插入到您的命令中。限制命令的執行權限:
在系統上限制應用程序執行的命令的權限,僅賦予最小必要權限。
確保應用程序運行在受限的用戶或群組下,以降低攻擊者能夠執行的命令。避免使用外部輸入作為命令的一部分:
不要將來自不信任來源的數據作為命令的一部分。
如果必須使用外部數據,請確保嚴格過濾預期外的字元。
LFI (本地檔案引入)
LFI (本地檔案引入)
如果是PHP的話,可以使用類似下方寫法預防,或者不直接引用檔案參數名稱,你可以用類似關聯式的方式來取得檔案或者資料頁面。
ini_set('open_basedir','./');
ini_set('allow_url_include','off');
其他程式語言的話請另外去找相關函數框架或寫法。
輸入驗證和過濾:
對所有輸入資料(包括URL參數、表單輸入、Cookie等)進行嚴格的驗證和過濾,以防止攻擊者嘗試填滿惡意檔案路徑。文件路徑白名單:
建立一個白名單,上市允許被包含的文件或目錄,並確保只有這些文件或目錄可以被包含。拒絕包含任何在白名單之外的文件。使用安全程式語言和框架:
使用具有安全性內建功能的程式語言和Web應用框架,例如Python的Django、Ruby on Rails等。這些框架通常會提供一些機制保護來防止LFI漏洞。不要將使用者輸入直接初始化檔案路徑:
永遠不要將使用者提供的資料直接安裝文件路徑。如果需要使用使用者提供的輸入來定位文件,請確保使用安全的方法來建立文件路徑,例如使用白名單或相對路徑。限製檔案存取權限:
設定和檔案系統的存取權限,確保只有授權使用者才可以存取檔案。避免使用過多伺服器的檔案權限設定。
RCE(遠端命令執行)
RCE
會導致RCE有很多原因,其中以PHP來說,最常因為被黑入後台,或者任何其他可以上傳檔案的上傳點,未限制上傳檔案類型,或者程式邏輯過濾不當,導致可以被存取web shell來RCE,因此,假設就算真的被上傳執行腳本,我們也可以限制命令函數(例如shell_exec,system,exec等等)使其無法執行,來防止至少被執行腳本也僅能執行PHP語法,而無法執行命令。
弱密碼
弱密碼
又稱弱口令,把密碼改複雜一點就好,並且可以的話最好加上 captcha。
複雜的標準為如下,達成項目越多複雜度越高英文大寫
英文小寫
數字
符號
至少8碼,12碼為佳