【问题标题】:Block API on the basis of payload size根据有效负载大小阻止 API
【发布时间】:2020-07-28 22:34:42
【问题描述】:

我的用例是当传入的有效负载大小(调用后)超过 5mb 时阻止 API,我该怎么做? API 是用 python (Django) 编写的,并部署在 AWS Beanstalk 上,带有经典的负载均衡器,没有 AWS API 网关。 我知道我可以在方法实现中检查有效负载/主体大小,但我想要的是在网关或负载均衡器级别阻止,以便服务器在开始时拒绝请求而不会渗透到代码中。 请帮我解决这个问题。

谢谢

【问题讨论】:

  • 您要阻止传入或传出请求吗?
  • 抱歉忘记提及传入流量。

标签: python django amazon-elastic-beanstalk aws-load-balancer


【解决方案1】:

在 wsgi/uwsgi 级别找到解决方案,在 wsgi.conf 中添加 LimitRequestBody。 更多信息——https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#limiting-request-content

示例:-

<Directory /opt/python/app/>


LimitRequestBody 5000000

</Directory>

【讨论】:

    【解决方案2】:

    用 Django 做这件事不是一个很好的选择,因为你必须实际接受请求,解析它,读取它,检查大小然后返回 DENY 的结果 我建议你在 Django 之前使用 Nginx 作为代理服务器,并且

    ```http {
    ...
    client_max_body_size 5M;
    

    } ```

    这有助于在请求到达 Django 服务器之前阻止请求。

    【讨论】:

    • 我同意在 django 中做的不是一个好的解决方案,这就是我提到的,我们没有使用 nginx,我们正在使用 wsgi,如果您有任何关于 wsgi 的解决方案,请告诉我谢谢
    • 所以你可以控制来自 environ['wsgi.input'] 的数据量然后检查 Content-Length 标头
    • 我是wsgi的新手,请您详细说明一下。
    【解决方案3】:

    一种方法是使用AWS WAF。

    使用 WAF,您可以根据请求大小 (size constraint rule statement) 创建规则。这样,您可以在超过特定大小的所有请求到达您的 ALB 之前拒绝它们。

    需要注意的是,WAF需要应用程序负载均衡器在您的 EB 或 CloudFront 分配之前。

    【讨论】:

    • 是的,你是对的,但我正在寻找后端/服务器端的解决方案,而不是 AWS 服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多