Python 如何在flask应用程序中禁止对POST端点的非浏览器请求(用户代理)?

Python 如何在flask应用程序中禁止对POST端点的非浏览器请求(用户代理)?,python,security,flask,connexion,Python,Security,Flask,Connexion,我正在加载一个登录表单以进行用户验证。我想知道是否可以将flaskapp中的端点限制为只响应我之前加载表单的浏览器请求 我认为CSRF代币可能是一种选择,但我想知道是否有更好的方法 我希望能够禁止Postman、curl和其他用户代理向特定端点发送请求,除非它来自具有UI登录表单的浏览器。您可以从请求.用户代理属性确定用户代理。例如,在我的情况下,使用Chrome浏览器访问Flask应用程序后,它具有以下值: {'browser': 'chrome', 'language': None, '

我正在加载一个登录表单以进行用户验证。我想知道是否可以将
flask
app中的端点限制为只响应我之前加载表单的浏览器请求

我认为CSRF代币可能是一种选择,但我想知道是否有更好的方法


我希望能够禁止Postman、curl和其他用户代理向特定端点发送请求,除非它来自具有UI登录表单的浏览器。

您可以从
请求.用户代理
属性确定用户代理。例如,在我的情况下,使用Chrome浏览器访问Flask应用程序后,它具有以下值:

{'browser': 'chrome',
 'language': None,
 'platform': 'linux',
 'string': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like '
           'Gecko) Chrome/71.0.3578.80 Safari/537.36',
 'version': '71.0.3578.80'}

但是,请记住,将用户代理更改为您想要的任何内容都是一项简单的任务。因此,我不会把你得到的东西看得太重。

如果你在表格中提供了CSRF代币,这不是可以防止的吗(请参见)?谢谢@snakecharmerb这确实是我的答案。我认为这不是一个有效的来源。因为用户可以更改用户代理头,不是吗?实际上,没有工具可以可靠地判断请求是否来自浏览器、机器人或其他任何东西。您可以使用HTTP请求中的数据来确定源。而且它很容易伪造。如果你想变得更聪明一点,你还必须使用行为和某种异常检测。