python - 如何在 Flask 中验证 URL 参数

标签 python url flask http-post pythonanywhere

这是我使用 Flask 和 Python 的第一个应用程序。

我使用以下 URL 格式从 Arduino 向运行在 Pythonanywhere 服务器实例上的 Flask 应用程序发送 POST 请求。

有效的 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 中实现这一点?

还建议,如果有任何更好的方法可用于保护应用程序免受未经授权的请求。

最佳答案

您可以让 flask 验证参数并自动抛出错误,如果您愿意从 URL 参数 切换(即URL)到路径参数(即 Path HTTP header 中的任何内容,或第一个“/”之后和“?”之前的 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/

您将在浏览器中收到提示,要求您输入用户名和密码,浏览器会在 session 期间记住它。或者,您可以在 Authorization header 中以 base64 编码形式设置用户名和密码:https://en.wikipedia.org/wiki/Basic_access_authentication

关于python - 如何在 Flask 中验证 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43833023/

相关文章:

python - 旧类(class)发生了什么?

javascript - 检查当前主机是否可以访问 URL

python - 访问 Flask-Restful 资源中的 API 记录器

python-3.x - Flask/uWSGI - 一段时间后进程过多

python - Numpy.allclose - 根据二进制值的相似百分比确定容差

python - 使用nltk.tag.brill_trainer(基于转换的学习)训练IOB Chunker

python - 使用python将文本文件转换为html文件

html - 在 URL 中使用 `%3F`

python - 将 URL 编码为 google 可读的格式

python - Flask-WTF 使用 input=submit 而不是 button type=submit