
Shopify API 初學(xué)者教程:定價(jià)、API操作指南
身份驗(yàn)證失效是指由于業(yè)務(wù)應(yīng)用程序?qū)τ脩暨M(jìn)行身份驗(yàn)證的方式而導(dǎo)致的安全漏洞。業(yè)務(wù)系統(tǒng)中最常被濫用的安全相關(guān)組件之一是其身份驗(yàn)證系統(tǒng)。
為了訪問大多數(shù)商業(yè)應(yīng)用程序上的其他信息,用戶必須首先使用其憑據(jù)驗(yàn)證其身份。每個(gè)登錄用戶都會(huì)獲得一個(gè)會(huì)話 ID。這是一種用于跟蹤登錄用戶活動(dòng)的令牌,相當(dāng)于用戶原始登錄憑據(jù)的臨時(shí)替代品。由于會(huì)話信息與登錄用戶相關(guān),因此跟蹤這些會(huì)話 ID 至關(guān)重要,以防止攻擊者冒充會(huì)話的合法所有者。
攻擊者可以通過多種方式通過受損的身份驗(yàn)證系統(tǒng)獲取訪問權(quán)限。
最好采用嚴(yán)格的密碼策略,密碼長度至少為 8 個(gè)字符,最多為 64 個(gè)字符。不要使用連續(xù)的密碼,例如“1234”或“asdf”、廣受歡迎的“password”,或任何與組織或電子郵件地址相關(guān)的密碼(例如,如果您的企業(yè)名稱是 Stackhawk,則密碼不應(yīng)包含“stackhawk”)。
使用Django-password-strength等軟件包,您可以在 Django 中強(qiáng)制執(zhí)行密碼檢查。或者,您可以在 settings.py 文件中使用 Django 的默認(rèn)設(shè)置,如下所示。
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
'OPTIONS': {
'min_length': 11,
}
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
UserAttributeSimilarityValidator可確保用戶使用的密碼不會(huì)與其在用戶數(shù)據(jù)中提供的現(xiàn)有特征(例如其姓名、電子郵件地址或角色)相似。因此,電子郵件地址為“admin@example.com”的管理用戶無法使用“admin”、“admin123”、“exampleAdmin”等密碼。
上述代碼片段中的MinimumLengthValidator表示密碼長度必須至少為 11 個(gè)字符。因此,具有給定電子郵件地址“test@example.com”的用戶將無法使用密碼“Gracey@me”進(jìn)行注冊,因?yàn)樵撁艽a只有 9 個(gè)字符長。
CommonPasswordValidator禁止用戶使用已知已經(jīng)被黑客破解的密碼,例如“abcd12345”。
NumericPasswordValidator限制用戶在密碼中僅使用數(shù)字,例如“0987654321”。
除了維護(hù)強(qiáng)密碼限制之外,用戶如何登錄和退出業(yè)務(wù)應(yīng)用程序也同樣重要。
控制客戶端或服務(wù)器如何保持會(huì)話至關(guān)重要。使用 settings.py 中的 Django 內(nèi)置設(shè)置(如下所示)是管理會(huì)話信息持續(xù)時(shí)間的一種方法。
INSTALLED_APPS = [
...
'django.contrib.sessions',
...
]
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
...
]
SESSION_COOKIE_AGE=1209600 # DEFAULT SESSION AGE OF 2 WEEKS
SESSION_COOKIE_SECURE=True
SESSION_EXPIRE_AT_BROWSER_CLOSE=True
Django 支持設(shè)置參數(shù) SESSION_EXPIRE_AT_ BROWSER_CLOSE 和 SESSION_COOKIE_AGE 來管理會(huì)話。前者在瀏覽器關(guān)閉時(shí),無論會(huì)話 cookie 有多舊,都會(huì)使會(huì)話失效。后者僅在會(huì)話的 cookie 超過期限時(shí)才使會(huì)話失效。
由于 SESSION_EXPIRE_AT_BROWSER_CLOSE 設(shè)置為 True,用戶不僅可以退出業(yè)務(wù)應(yīng)用程序,還可以關(guān)閉瀏覽器,而攻擊者無法訪問瀏覽器中保存的相同會(huì)話數(shù)據(jù),從而防止會(huì)話劫持。
在商業(yè)應(yīng)用中,多重身份驗(yàn)證 (MFA) 增加了一層額外的保護(hù)。除了使用用戶名和密碼外,您還可以使用其他身份驗(yàn)證方法。
多因素身份驗(yàn)證有三種類型:
Django 通過第三方包支持 MFA,而不是內(nèi)置的 Django 包。Django 中兩個(gè)流行的 MFA 包是Django-mfa和Django-multifactor。
在識(shí)別階段,應(yīng)避免多次使用同一類型的多因素組。如果用戶使用電子郵件和密碼加入,則第二種身份驗(yàn)證方法應(yīng)該是令牌或指紋。如果第二個(gè)身份驗(yàn)證元素是指紋,則第三個(gè)身份驗(yàn)證因素必須是令牌。
人們經(jīng)常會(huì)忘記注冊郵箱或密碼。但是,確保向用戶發(fā)送的任何消息都含糊其辭對(duì)于防止惡意用戶濫用響應(yīng)漏洞至關(guān)重要。例如,如果用戶嘗試使用錯(cuò)誤的密碼登錄業(yè)務(wù)應(yīng)用程序,通常會(huì)回復(fù)一條消息:“密碼不正確。請重試。”雖然這對(duì)真正的用戶可能有用,但這是一個(gè)攻擊者可能利用的安全漏洞。
現(xiàn)在攻擊者知道了平臺(tái)上存在電子郵件地址,他或她可以嘗試暴力破解該帳戶。因此,不要在身份驗(yàn)證期間提供具體響應(yīng),而要使用模糊響應(yīng)。例如,如果用戶輸入錯(cuò)誤,則“電子郵件或密碼不正確”將是典型的模糊響應(yīng)。因此,潛在的攻擊者無法確定哪個(gè)是不準(zhǔn)確的。
此外,對(duì)于嘗試恢復(fù)丟失密碼的用戶,您可以嘗試使用“電子郵件已發(fā)送”等不太明顯的消息,而不是使用“電子郵件未注冊”之類的警報(bào)。如果應(yīng)用程序中存在電子郵件地址,您將發(fā)送電子郵件,否則什么也不會(huì)發(fā)生。
在本文中,我們介紹了攻擊者如何使用會(huì)話數(shù)據(jù)和弱密碼來利用身份驗(yàn)證漏洞。我們還向您展示了如何通過實(shí)施更強(qiáng)大的會(huì)話管理和密碼策略來保護(hù)自己免受這些攻擊者的攻擊。
應(yīng)用程序中身份驗(yàn)證實(shí)施不當(dāng)會(huì)導(dǎo)致攻擊漏洞。隨著世界繼續(xù)依賴互聯(lián)網(wǎng),弱身份驗(yàn)證無處不在,保護(hù)用戶身份比以往任何時(shí)候都更加重要。
文章來源:Django Broken Authentication Guide: Examples and Prevention
Shopify API 初學(xué)者教程:定價(jià)、API操作指南
使用人工智能的人臉檢測技術(shù):應(yīng)用場景、優(yōu)勢及實(shí)現(xiàn)策略
Python調(diào)用IP地址歸屬地查詢API教程
使用WEB3錢包API實(shí)現(xiàn)智能合約交互的完整教程
2024年主流的快遞物流API
2024年國外大廠語言翻譯API
如何確定 API 定價(jià)的最佳方法?
使用Python和Kimi API翻譯Excel表格內(nèi)容:自動(dòng)化處理多語言數(shù)據(jù)的最佳實(shí)踐
每個(gè) Java 軟件架構(gòu)師都應(yīng)該知道的 20 件事
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)