繁体   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