簡體   English   中英

限制對Flask REST API的訪問

[英]restrict access to a flask REST API

我已經用flask在python中構建了一個get REST API。 我正在從自己的網站調用此API,並且希望避免其他網站使用它。

為此,請在api定義的標頭中設置

'Access-Control-Allow-Origin' = '****'

****是允許撥打電話的網站域名。

這足以避免其他人使用我的api嗎?

在Flask中做CORS的更好方法

我可能會使用Flask-CORS向您的Flask項目添加自適應的跨源資源共享功能...

首先安裝Flask-CORS:

pip install -U flask-cors

然后在您的應用實例內實現:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "example.com"}})

這將僅允許從example.com訪問該特定路由,並為您處理所有標頭,類似於Avian的建議,但采用Flasky的方式。 當然,如果您希望特定的來源(或實際上是任何來源)可以訪問完整的API(或部分API),則可以使用通配符。

這足以避免其他人使用我的api嗎?

否,這只會阻止人們使用JS從其他網站/來源訪問您的API。 它不會阻止人們簡單地使用CuRL或等效語言直接訪問您的API。 如果要阻止對API的訪問,則應實現某種形式的令牌/密鑰身份驗證憑據,以僅對希望獲得訪問權限的用戶進行身份驗證,並向任何沒有有效憑據的用戶返回“未經授權” 401。

是的,但是請確保以正確的格式輸入。

“ Access-Control-Allow-Origin”:“ https://example.com ”,

這將僅允許來自example.com的請求。

關於第二個問題,如果其他任何人正在使用或可以從mydomain.com發送請求,那么他們當然可以使用您的API。 如果您確實擔心使用API​​的其他人,我強烈建議使用Flask-WTF實現CSRF保護-因此,沒人可以偽造請求。

CORS

我已經用flask在python中構建了一個get REST API。 我正在從自己的網站調用此API,並且希望避免其他網站使用它。

Robert Putt建議使用Flask CORS軟件包是解決此問題的正確方法,但他本人指出,這不會阻止您的API被其他人使用,這將導致我們遇到下一個問題,我將嘗試解決更多詳情。

API濫用

這足以避免其他人使用我的api嗎?

簡短的答案是“否”,因為您的API可以通過許多其他方式使用,例如使用Postman,自動腳本或由機器人抓取,僅舉幾例。

保護API的通常步驟是使用令牌形式的機密,例如用於識別正在執行請求的API密鑰(又名Web應用程序或移動應用程序),以及用於識別執行請求的用戶的用戶身份驗證令牌,但注定兩者都很容易從其原始使用范圍中提取出來,並由攻擊者在自動腳本中或在諸如Postman之類的工具中手動使用。 這很容易在攻擊者控制的設備中完成,但也可以通過在攻擊者的筆記本電腦中運行的免費WiFi強制門戶來完成。 當攻擊者在機場,火車站/汽車站和其他公共場所使用免費的wifi強制門戶網站技術時,他們將誘使用戶安裝自定義證書,該證書將允許他們解密所有https連接,從而獲得對其令牌的訪問權,從而能夠以他們的名義在不知情的情況下對API服務器進行調用,並且可以在允許用戶正常瀏覽該網站的同時完成此操作。

因此,所有在客戶端運行且需要秘密才能訪問API的事物注定會以多種方式被濫用,您可以在本系列有關移動api安全技術的文章中了解更多信息。 本文將教您如何使用API​​密鑰,用戶訪問令牌,HMAC,TLS固定來保護API以及如何繞過它們。 這些文章更多地是針對移動應用程序的API的上下文,但是它們很好地說明了為什么您不能在Web應用程序的上下文中有效地保護您的API,只會使它變得更加困難。

最后,我建議您的Web應用程序也使用CSP標頭 ,該標頭將允許您設置內容安全策略以及實時的違規報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM