常見Web安全問題攻防解析
常見安全問題
- XSS攻擊
- CSRF攻擊
- SQL注入攻擊
- 檔案上傳漏洞
- 資訊洩露
- 越權
- 設計缺陷
一、XSS攻擊
定義:XSS (Cross Site Script),跨站指令碼攻擊,因縮寫和css(Cascading Style Sheets) 重疊,所以叫 XSS。XSS 的原理是惡意攻擊者往 Web 頁面裡插入惡意可執行網頁尾本程式碼,當用戶瀏覽該頁之時,嵌入其中 Web 裡面的指令碼程式碼會被執行,從而可以達到攻擊者盜取使用者資訊或其他侵犯使用者安全隱私的目的。
分類:
- 儲存型:注入的惡意程式碼儲存在伺服器上(常用於留言板、論壇帖子、CRM),受害者請求伺服器獲取資訊的時候,這些惡意程式碼就被瀏覽器成功執行。
- 反射型:注入的惡意程式碼沒有儲存在伺服器上,通過引誘使用者點選一個連結到目標網站進行實施攻擊。
- DOM型:注入的惡意程式碼並未顯式的包含在web伺服器的響應頁面中,但會被頁面中的js指令碼以變數的形式來訪問到的方式來進行實施攻擊。
案例:
-
儲存型:論壇帖子介面input輸入框中,輸入<script>alert("xss")</script>進行提交。
- 反射型:在瀏覽器輸入框中,輸入/xxx.php?name=<script>alert(/xss/)</script>
- DOM型:
<script> var temp = document.URL; var
自測的方法:看見輸入框就輸入:<script>alert("xss")</script>進行提交
預防措施:
- 對 style、script、image、src、a 等不安全的因素進行過濾或轉義
- 可以利用一些模板引擎避免 XSS 攻擊,比如 Laravel框架使用的 Blade,還有twig,Smarty 等
- 可以利用 HTTP-only,將 cookie 設定成 HTTP-only 防止 XSS 攻擊
二、CSRF攻擊
定義:CSRF(Cross-site request forgery:跨站請求偽造)是攻擊者通過偽裝成受信任的使用者,盜用受信任使用者的身份,用受信任使用者的身份傳送惡意請求。
預防措施:
- 重要操作不使用GET
- 讓使用者手工輸入驗證碼
- 驗證HTTP請求來源
- 使用框架機制,例如 laravel 的 csrf token機制
三、SQL注入攻擊
定義:SQL注入攻擊是通過WEB表單提交,在URL引數提交或Cookie引數提交,將懷有惡意的“字串”,提交給後臺資料庫,欺騙伺服器執行惡意的SQL語句。SQL注入的危害很大,利用SQL注入可以進行,拖庫、刪庫、刪表、UDF提權、讀取檔案等。
案例:
delete from user where id = ?;
傳入引數變數為` 1 or 1=1`
執行注入後的Sql語句,可以返回 user 表的全部資料
預防措施:
- 使用 pdo 對 sql 進行預處理,然後注入引數
- 使用框架,目前主流框架都對 SQL 注入問題做了封裝處理
四、檔案上傳漏洞
定義:檔案上傳漏洞是攻擊者上傳了一個可執行的檔案到伺服器上執行,可執行檔案包括有病毒、木馬、惡意指令碼等。
危害: 檔案上傳漏洞與SQL注入或XSS相比,其風險更大,如果存在上傳漏洞攻擊者甚至可以直接上傳一個webshell指令碼到伺服器上。
預防措施:
- 副檔名檢測
- 檔案 MIME 真實型別驗證
- 檔案重新命名
- 檔案目錄設定不可執行許可權
- 設定單獨域名的檔案伺服器
五、資訊洩露
定義:資訊洩露主要指使用者的手機號、郵箱、密碼、身份證、地址等敏感資料洩露,還有伺服器上的檔案和環境變數等敏感資料洩露,還包括將直接將企業原始碼上傳到開發平臺等
案例:
- 開發介面時,介面返回使用者明文的手機號、身份證號碼等
- 除錯程式碼時,程式碼中提交了一些除錯資訊,未進行刪除
- debug環境線上環境開啟洩露伺服器資訊、資料庫密碼等
- 公司程式碼上傳至公有版本庫
預防措施:
- 敏感資料脫敏(比如手機號、身份證、郵箱、地址)等
- 程式碼引入 CodeReview機制、debug是否開啟、是否使用列印等洩露核心伺服器資訊的程式碼
- 定期從gitHub、碼雲等公有版本倉庫檢測是否洩露原始碼
六、越權
定義:超出了你自己所擁有的許可權,幹了你本來不可能幹的事情。
分類:
- 水平越權:使用者A未授權可以訪問使用者B的資料。
- 垂直越權:未登入使用者可以訪問需要授權的應用。
預防措施:
- 對於所有涉及到使用者資料的操作,必須嚴格判斷當前使用者的身份。
- 對於所有需要許可權控制的位置,必須嚴格檢驗使用者許可權級別。
PPT模板下載大全https://redbox.wode007.com
七、設計缺陷
1、 返回資訊過多
案例:登入時進行驗證,當用戶不存在時,返回使用者不存在,當用戶被禁用時,返回使用者已被禁用。
預防措施:
- 避免攻擊者進行惡意嘗試,不應該返回過多的資訊,可以統一返回“使用者名稱或密碼錯誤”。
2、 簡訊介面被惡意攻擊
案例:註冊或登入時使用者輸入手機號碼就可直接觸發簡訊介面,這塊最容易被攻擊者進行簡訊轟炸。
預防措施:
- 手機號、驗證碼引數校驗
- 設定同一手機號簡訊傳送間隔
- 設定每個IP地址每日最大發送量
- 設定每個手機號每日最大發送量
- 升級簡訊介面的驗證方法、驗證碼機制引入等
3、 遍歷
案例:使用資料庫主鍵 id,作為業務 id 使用,外部爬蟲根據主鍵輪訓介面,爬取資料資訊。
預防措施:
- 資料庫引入雪花id概念,對外業務介面使用雪花id作為業務id。