[英]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.