SQL Injection
將惡意SQL語法插入輸入字串(作為指令或查詢的一部分),並且利用了軟體或網頁應用程式的漏洞 – 例如沒有正確地過濾使用者輸入。比方說,攻擊者可以將惡意輸入變成SQL查詢的參數,讓資料庫認為是SQL指令的一部分而執行。 SQLi攻擊成功可以讓駭客偽裝成目標身份並取得資料庫伺服器的管理權限。駭客接著可以修改現有資料(如取消交易),取出系統內的資料,破壞、覆蓋或刪除資料
防範方法
1.嚴格限制Web應用的資料庫的操作權限,給此用戶提供僅僅能夠滿足其工作的最低權限,從而最大限度的減少注入攻擊對資料庫的危害。
2.檢查輸入的資料是否具有所期望的資料格式,嚴格限制變量的類型,例如使用regexp包進行一些匹配處理,或者使用strconv包對字符串轉化成其他基本類型的資料進行判斷。
3.對進入資料庫的特殊字符('”\尖括號&*;等)進行轉義處理,或編碼轉換。Go 的text/template包裡面的HTMLEscapeString< /code>函數可以對字符串進行轉義處理。
4.所有的查詢語句建議使用資料庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中,即不要直接拼接SQL語句。例如使用database/sql裡面的查詢函數Prepare和Query,或者Exec(query string, args ...interface{} )。
5.在應用發布之前建議使用專業的SQL注入檢測工具進行檢測,以及時修補被發現的SQL注入漏洞。網上有很多這方面的開源工具,例如sqlmap、SQLninja等。
6.避免網站打印出SQL錯誤資訊,比如類型錯誤、字段不匹配等,把代碼裡的SQL語句暴露出來,以防止攻擊者利用這些錯誤資訊進行SQL注入。
XSS
XSS 是 Cross-site scripting 的縮寫,在 web 應用中,它也可以算是範圍最大且攻擊方法最豐富的一個資安議題。XSS 主要是利用在輸入欄位輸入 JS 的 script tag來造成攻擊,透過在輸入框輸入一些特殊語法,規避掉字元的規則(或是程式本身沒有做好字串驗證),使原本應該是單純字串的部分,變成可以執行的程式碼。
XSS攻擊會出現在處理使用者輸入的網頁,如資料庫、登入和搜尋表單、評論功能和留言板/論壇 – Stored XSS。錯誤和搜尋結果頁面(將輸入作為請求的一部分送給伺服器)也可能被用來傳送攻擊者注入的惡意腳本 – Reflected XSS。攻擊者還可以修改受害者瀏覽器內的文件物件模型(Document Object Model, DOM)來執行惡意行為 – DOM-based XSS。 造成的影響從騷擾到重大資安風險 – 造成不當網站內容、竊取或變動session和授權cookie、產生會被誤認為有效的請求、將使用者轉向惡意網站、劫持受害者帳號、造成網站停擺或將惡意軟體送進系統。
防範方法
無效身分驗證
通過錯誤使用應用程序的身份認證和會話管理功能,攻擊者能夠破譯密碼、密鑰或會話令牌,或者利用其它開發缺陷來暫時性或永久性冒充其他用戶的身份。
可能產生的攻擊點:
1.允許密碼填充,攻擊者有可能獲得完整的用戶名密碼列表
2.允許暴力破解(枚舉法,就是一直猜直到猜對)或【其他自動攻擊】
3.默認的管理員用戶名和密碼太過簡單
4.比較簡單的忘記密碼程序或者驗證密碼憑證
5.使用明文、【加密】、【弱散列】密碼
6.缺少多因素身份驗證或多因素身份驗證失效
7.URL暴露會話ID
8.登錄成功後不更新會話ID
防範方法
1.少用默認配置。特別是管理員用戶,默認配置會帶來很多敏感信息的洩露;
2.多因素身份驗證,比如追加手機號驗證等,這樣可以防止自動填充帶來的登錄;
3.定期執行弱密碼檢查。
4.使用更加複雜的密碼策略
5.限制多次登錄失敗的會話,登錄失敗後使用統一的回復
6.登錄成功後隨機生成新ID,且不能顯示在URL中,絕對超時後失效。