这是我使用Flask和Python的第一个应用程序。
我使用以下网址格式将Arduino的POST请求发送到在Pythonanywhere服务器实例上运行的烧瓶应用程序。
有效的POST请求:3个URL参数 http://voyagers.pythonanywhere.com/senddata?node=1234&lat=18.5580&lng=73.8075
我需要通过以某种形式验证URL来阻止进一步处理的请求。我希望这可以保护我的应用免受未经身份验证的POST请求。
说出这样的话:超过3个URL参数 http://voyagers.pythonanywhere.com/senddata?node=324&lat=18.5580&lng=73.8075&a=c&a=d
如何在Flask中实现这一目标?
同时建议,如果有更好的方法可用于保护未授权请求的应用程序。
答案 0 :(得分:5)
如果您愿意从网址参数(即'?'之后的任何内容)切换,您可以flask
验证参数并自动抛出错误URL中的符号)路径参数(即Path
HTTP标题中的任何内容,或者第一个' /'之后的URL部分'?')。
您的示例可能如下所示:
@app.route('/post/<int:node_id>/<float:lat>/<float:lng>', methods=['POST'])
def process_post_request(node_id, lat, lng):
# do some work
return your_result
然后您可以向URL发送请求,例如:http://example.com/post/1234/-11.45/21.34
您可以在此处找到有关此内容的更多信息:http://flask.pocoo.org/docs/0.12/quickstart/#variable-rules
为了保护访问权限,您可以在此处使用一些示例代码段:http://flask.pocoo.org/snippets/category/authentication/
我建议仅限制访问HTTPS并使用基本身份验证,如果你只是玩游戏。您可以使用此处所述的简单装饰器执行此操作:http://flask.pocoo.org/snippets/8/
您将在浏览器中收到一个提示,要求您输入用户名和密码,浏览器会在会话期间记住它。或者,您可以在Authorization
标题中以base64编码格式设置用户名和密码:https://en.wikipedia.org/wiki/Basic_access_authentication