3 回答

TA貢獻1804條經(jīng)驗 獲得超7個贊
你是對的,保護你的 API 對你來說毫無意義。僅在某些情況下才需要保護 API。
如果您正在訪問不希望任何人看到的數(shù)據(jù),也許是通過后端調(diào)用,那么添加某種形式的安全性(通常是請求標頭中的 API 密鑰或授權(quán)令牌)是有意義的。
但是,如果您從前端(即客戶端)調(diào)用后端 API,那么在那里設(shè)置額外的安全性是沒有意義的,因為用戶已經(jīng)可以看到請求并且已經(jīng)可以訪問 API 返回的數(shù)據(jù)- 因此,通過保護它,您將一事無成。
通常,如果用戶正在訪問的頁面包含您不希望每個人都看到的敏感數(shù)據(jù),您將采取措施來保護您的網(wǎng)站(例如,在您訪問該頁面之前,使用用戶名和密碼登錄來保護它) . 如果您采用這種方法,網(wǎng)站受用戶名和密碼保護,那么您可以更新 API 以確保它不會響應用戶未通過身份驗證的請求(例如通過生成會話令牌或某些獨特的東西)每個登錄的用戶)。
如果您環(huán)顧擁有大量免費數(shù)據(jù)的網(wǎng)站,您會發(fā)現(xiàn)它們都有完全不安全的前端 API 調(diào)用(因為如果數(shù)據(jù)已經(jīng)可以免費訪問則毫無意義)。有些網(wǎng)站采取措施,以盡量確保這是他們自己的網(wǎng)站正在調(diào)用的API,但即使如此,這是一個有點毫無意義的網(wǎng)絡(luò)鏟運機始終能夠從HTML中提取數(shù)據(jù)。

TA貢獻1851條經(jīng)驗 獲得超5個贊
查看此頁面,其中概述了身份驗證標頭。這種更簡單的方法是在 Flask 中對標頭信息進行硬編碼,以使其更加安全。您還可以嘗試從數(shù)據(jù)庫讀取標題信息的更復雜的路線。目前我從 postgres db 中讀取的內(nèi)容如下,因此您可以為 sqlite 稍微修改它。
def valid():
headers = request.headers
auth = headers.get("X-Api-Key")
user = User.query.filter_by(apikey=auth).first_or_404()
print('from search of db ',user,'',auth)
return str(user)
添加回答
舉報