簡體   English   中英

如果調用是在AJAX中進行的,如何檢測並僅允許特定的URL訪問Flask API?

[英]How to detect and allow only specific urls to access Flask API, if the call is made in AJAX?

我已經為網站創建了Flask API,其中前端AJAX通過同一域上的POST請求調用API。

但是該API不受保護,因為任何人都可以使用參數(在JS AJAX中可見)發出POST請求並獲得響應。

我想通過僅允許某些特定的URL訪問我的Flask API來保護這一點。 如何在我的Python代碼中執行此操作?

示例情況-Python

@app.route('/', methods=['GET','POST']) 
def post():
    if request.method == 'POST':
        return "This is Post"
    return render_template("index.html")

AJAX

$.ajax({
type: 'POST', 
url: "https://www.example.com/",
//Something ....

因此,這里https://www.example.com/是網站,GET請求在該網站上返回index.html頁面。 但是在POST請求中,它返回“ This is post”。 考慮到要從AJAX發起的POST請求,我應該如何只允許https://www.example.com/獲得響應?

謝謝

無法要求使用特定客戶端或從特定位置訪問頁面。 所有表明該信息的信息都可以輕松設置為您想要的任何值。 例如,如果您選中request.host ,則用戶可以使用Python Requests設置Host標頭:

requests.get('http://localhost:5000', headers={'Host': 'example.com'})

如果要限制可以訪問您的API,則需要實施身份驗證。 但仍然不會限制他們如何能夠訪問它。

您可以在before_request鈎子中檢查request.host_url

@app.before_request
def check():
    if request.host_url != "http://www.example.com/"
        abort(401)

您可以使用Flask-Security保護您的API。 有一個關於它的教程

暫無
暫無

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

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