
掌握ChatGPT插件與自定義GPT
相當(dāng)令人印象深刻,對(duì)吧?
好的,那么首先什么是訪問(wèn)控制?
好吧,如果您已經(jīng)看到了登錄頁(yè)面,那么您已經(jīng)與訪問(wèn)控制的實(shí)現(xiàn)進(jìn)行了交互。
訪問(wèn)控制,通常稱為授權(quán),是一組強(qiáng)制訪問(wèn)資源的機(jī)制和策略。
通常,一旦服務(wù)器通過(guò)身份驗(yàn)證機(jī)制確定了您的身份,它就會(huì)授予或限制您在系統(tǒng)中可以訪問(wèn)的資源。
此外,授權(quán)基礎(chǔ)設(shè)施是用戶跟蹤和資源監(jiān)控的支柱。
充分實(shí)施強(qiáng)大而安全的訪問(wèn)控制系統(tǒng)是一項(xiàng)復(fù)雜而棘手的任務(wù)。訪問(wèn)控制本質(zhì)上與系統(tǒng)架構(gòu)密切相關(guān)。
由于大多數(shù)平臺(tái)的用戶通常扮演多個(gè)角色,因此訪問(wèn)控制的復(fù)雜性可能會(huì)呈指數(shù)級(jí)增長(zhǎng)。
開發(fā)強(qiáng)大的訪問(wèn)控制是一項(xiàng)艱巨的挑戰(zhàn),即使是經(jīng)驗(yàn)豐富的工程師也難以應(yīng)對(duì)。根據(jù)系統(tǒng)的規(guī)模和復(fù)雜性,適當(dāng)?shù)慕鉀Q方案可能意味著實(shí)施簡(jiǎn)單的身份驗(yàn)證、第三方庫(kù),甚至兩者兼而有之。
值得慶幸的是,JavaScript 和 Angular 擁有流行且強(qiáng)大的解決方案,例如auth0和JWT(JSON Web Tokens),等等。
簡(jiǎn)而言之,破壞的訪問(wèn)控制包括可能影響您訪問(wèn)系統(tǒng)組件的威脅或漏洞。
訪問(wèn)控制被破壞可能會(huì)給您的系統(tǒng)帶來(lái)災(zāi)難性的后果,因?yàn)樗试S攻擊者在您的平臺(tái)上肆意妄為。因此,解決任何存在的漏洞至關(guān)重要。
現(xiàn)在我們了解了訪問(wèn)控制中斷的概念,讓我們來(lái)討論一下這些攻擊的實(shí)際例子。
我們將重點(diǎn)關(guān)注不安全的 ID、路徑遍歷、文件權(quán)限漏洞和客戶端緩存攻擊。
大多數(shù)存儲(chǔ)數(shù)據(jù)的關(guān)系數(shù)據(jù)庫(kù)都使用 ID 來(lái)識(shí)別資源。此外,現(xiàn)代網(wǎng)站使用某種形式的 ID 或索引來(lái)快速高效地檢索數(shù)據(jù)。因此,如果您的網(wǎng)站允許用戶為這些敏感資源輸入他們的 ID,并且這些 ID 很容易猜到,那么您就很容易受到這種攻擊。
讓我們舉例說(shuō)明。
假設(shè)您有一個(gè)顯示用戶個(gè)人資料的個(gè)人資料頁(yè)面部分。然后以下 URL 檢索用戶個(gè)人資料。
https://www.mywebsite.com/profile?id=123
但是,如果我手動(dòng)更改查詢字符串中的數(shù)字并且不存在活動(dòng)訪問(wèn)控制,那么我就可以訪問(wèn)任何配置文件。
為了減輕這種脆弱性,我們必須在開發(fā)周期早期解決它。
首先,ID 不應(yīng)容易被猜到。因此,您必須開發(fā)系統(tǒng),使所有 ID(或至少屬于敏感資源的 ID)都經(jīng)過(guò)混淆且獨(dú)一無(wú)二。您可以通過(guò)將全局唯一標(biāo)識(shí)符(或GUID)實(shí)現(xiàn)為 ID 來(lái)實(shí)現(xiàn)這一點(diǎn)。
另一個(gè)可靠的解決方案將涉及每個(gè)請(qǐng)求的會(huì)話驗(yàn)證以及適當(dāng)?shù)脑L問(wèn)控制。
路徑遍歷背后的想法是在未經(jīng)授權(quán)的情況下瀏覽文件系統(tǒng)的目錄樹。?
這意味著允許用戶訪問(wèn)服務(wù)器文件系統(tǒng)中的資源的系統(tǒng)存在漏洞。
如果路徑字符串可供修改且不存在驗(yàn)證,則此漏洞尤其危險(xiǎn)。
為了說(shuō)明,請(qǐng)看以下場(chǎng)景。
https://www.mywebsite.com/photos?file=user.png
在這種情況下,攻擊者可以將user.png更改為../../etc/passwd并訪問(wèn)應(yīng)用程序的數(shù)據(jù)。
為了減輕路徑遍歷攻擊,您必須對(duì)用戶輸入進(jìn)行適當(dāng)?shù)尿?yàn)證,并限制對(duì)應(yīng)用程序外部的服務(wù)器目錄的訪問(wèn)。
幸運(yùn)的是,這方面的責(zé)任通常由服務(wù)器工程師承擔(dān)。但是,如果您啟用需要訪問(wèn)和修改服務(wù)器中的文件(如文件上傳)的功能,請(qǐng)確保實(shí)施強(qiáng)大且經(jīng)過(guò)測(cè)試的庫(kù)。
文件權(quán)限漏洞與服務(wù)器文件系統(tǒng)有關(guān)。
應(yīng)用程序包含許多不應(yīng)修改的配置文件和資源,在大多數(shù)情況下,用戶無(wú)法讀取或執(zhí)行這些文件和資源。然而,如果沒有適當(dāng)?shù)呐渲貌呗裕粽呔涂梢悦闇?zhǔn)這些文件并控制整個(gè)平臺(tái)。
為了說(shuō)明這一點(diǎn),這里有一個(gè)嘗試訪問(wèn)不可讀文件的示例。
https://www.mywebsite.com/photos?file=../../angular.json
解決文件權(quán)限漏洞需要對(duì)服務(wù)器配置和維護(hù)有廣泛的了解。因此,我們建議您咨詢服務(wù)器工程師并避免觸碰任何東西。除非您絕對(duì)需要修改服務(wù)器權(quán)限以添加與文件操作相關(guān)的功能,否則請(qǐng)將此事留給服務(wù)器工程師。
現(xiàn)在,您的某些客戶端很可能與其他用戶共享計(jì)算機(jī)。不幸的是,這是我們作為開發(fā)人員無(wú)法控制的情況,但它會(huì)導(dǎo)致客戶端緩存等漏洞。
客戶端緩存漏洞很難緩解,因?yàn)樗鼈兩婕肮粽呃脮?huì)話憑證、緩存頁(yè)面或存儲(chǔ)在經(jīng)過(guò)身份驗(yàn)證的客戶端的瀏覽器中的數(shù)據(jù)。
要利用此類漏洞,攻擊者需要物理訪問(wèn)受害者的計(jì)算機(jī)。一旦獲得訪問(wèn)權(quán)限,足夠有決心的攻擊者就可以破壞用戶數(shù)據(jù)。
對(duì)于客戶端緩存,最有效的解決方案就是不在客戶端上存儲(chǔ)敏感的用戶信息。但是,如果由于某些業(yè)務(wù)需求而必須這樣做,請(qǐng)確保實(shí)施適當(dāng)?shù)?HTML 元標(biāo)記和異步驗(yàn)證以確認(rèn)顯示的權(quán)限。
許多因素都會(huì)使解決訪問(wèn)控制漏洞變得非常簡(jiǎn)單或極具挑戰(zhàn)性。系統(tǒng)架構(gòu)、平臺(tái)復(fù)雜性和數(shù)據(jù)敏感性只是其中的一部分。
保護(hù)系統(tǒng)安全的第一步應(yīng)該始終是實(shí)施適當(dāng)?shù)纳矸蒡?yàn)證機(jī)制。
就安全性而言,實(shí)施auth0之類的解決方案?將幫助您實(shí)現(xiàn)大部分目標(biāo)。出于本文的目的,我們僅探討如何實(shí)施基本的 auth0 登錄。但是,如果您想要更多自定義功能,也可以探索 JWT 之類的解決方案。?
首先,運(yùn)行以下命令將 auth0 添加到您的 Angular 項(xiàng)目。
ng add @auth0/auth0-angular
現(xiàn)在,轉(zhuǎn)到項(xiàng)目 src 文件夾內(nèi)的app.module.ts文件并導(dǎo)入模塊。您可以在此文件中指定域和客戶端 ID。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
// Import the module from the SDK
import { AuthModule } from '@auth0/auth0-angular';
@NgModule({
declarations: [
AppComponent,
HomeComponent
],
imports: [
BrowserModule,
AppRoutingModule,
// Import the module into the application, with configuration
AuthModule.forRoot({
domain: 'YOUR_AUTH0_DOMAIN',
clientId: 'YOUR_AUTH0_CLIENT_ID',
}),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
最后,轉(zhuǎn)到您想要添加登錄功能的組件并導(dǎo)入AuthService模塊。
import { Component } from '@angular/core';
// Import the AuthService type from the SDK
import { AuthService } from '@auth0/auth0-angular';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title = 'My App';
// Inject the authentication service into your component through the constructor
constructor(public auth: AuthService) {}
loginWithRedirect(): void {
// Call this to redirect the user to the login page
this.auth.loginWithRedirect();
}
}
現(xiàn)在,您需要做的就是設(shè)置正確的域和客戶端 ID,添加一個(gè)按鈕來(lái)顯示登錄,瞧,您就擁有了一個(gè)具有身份驗(yàn)證機(jī)制的登錄功能。
當(dāng)然,還需要進(jìn)行許多調(diào)整才能完成實(shí)施,但為此,我們將引導(dǎo)您訪問(wèn) auth0 wiki 頁(yè)面,其中有關(guān)于如何正確實(shí)施其解決方案的詳盡指南。
現(xiàn)在您了解了什么是破壞的訪問(wèn)控制,以及如何通過(guò)結(jié)合適當(dāng)?shù)纳矸蒡?yàn)證機(jī)制、適當(dāng)?shù)南到y(tǒng)架構(gòu)實(shí)施和輸入驗(yàn)證來(lái)減輕其影響,您的系統(tǒng)就有更好的機(jī)會(huì)抵御潛伏在網(wǎng)絡(luò)上的惡意行為者。
緩解訪問(wèn)控制漏洞的方法與漏洞數(shù)量一樣多。此外,網(wǎng)絡(luò)上每天都會(huì)出現(xiàn)新的威脅,其中任何一個(gè)都可能對(duì)我們的平臺(tái)造成毀滅性打擊。
不幸的是,實(shí)現(xiàn)強(qiáng)大的訪問(wèn)控制策略可能是一項(xiàng)艱巨的任務(wù)。對(duì)于擁有眾多服務(wù)和前端的大型復(fù)雜平臺(tái)來(lái)說(shuō),情況尤其如此。
盡管如此,我們必須盡力彌補(bǔ)盡可能多的差距。
文章來(lái)源:Angular Broken Access Control Guide: Examples and Prevention
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)