如何在Flask中验证URL参数

时间:2017-05-07 15:02:32

标签: python url flask http-post pythonanywhere

这是我使用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中实现这一目标?

同时建议,如果有更好的方法可用于保护未授权请求的应用程序。

1 个答案:

答案 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