【发布时间】:2012-11-12 03:28:33
【问题描述】:
跟进this GWT-RPC question (and answer #1) re. field size checking,我想知道检查预反序列化发送到服务器的最大数据大小的正确方法,例如 if request data size > X then中止请求。重视简单性并基于上述问题/答案的答案,我倾向于相信检查最大整体请求大小就足够了,更细粒度的检查(即现场级别检查)可以推迟到反序列化后,但我对任何最佳实践建议。
感兴趣的技术栈:GWT-RPC 客户端-服务器与 Apache-Tomcat 前端网络服务器的通信。
我想第一步是全局限制任何请求的大小(LimitRequestBody 在 httpd.conf 或/和其他?)。
是否有更细粒度的检查,比如可以为每个 RPC 请求设置的东西?如果有,在哪里,怎么做?更细粒度的检查能为一个全局设置带来多少安全价值?
为了更具体地说明这个问题,假设我们在同一个 servlet 上有以下两个 RPC 请求签名:
public void rpc1(A a, B b) throws MyException;
public void rpc2(C c, D d) throws MyException;
假设我大约知道以下最大尺寸:
- 一个:10 kB
- b:40 kB
- c: 1 M B
- d: 1 kB
那么我期望以下最大尺寸:
- rpc1:50 kB
- rpc2:1 MB
在这个例子的上下文中,我的问题是:
- 在哪里/如何配置任何请求的最大大小 - 即在我上面的示例中为 1 MB?我相信它是 httpd.conf 中的 LimitRequestBody 但不能 100% 确定它是否是用于此目的的唯一参数。
- 如果可能,在哪里/如何配置每个 servlet 的最大大小 - 即,我的 servlet 中任何 rpc 的最大大小为 1 MB?
- 如果可能,在哪里/如何配置/检查每个 rpc 请求的最大大小 - 即最大 rpc1 大小为 50 kB,最大 rpc2 大小为 1 MB?
- 如果可能,在哪里/如何配置/检查每个 rpc 请求参数的最大大小 -- 即,a 是 10 kB,b 是 40 kB, c 为 1 MB,d 为 1 kB。我怀疑进行后反序列化是有实际意义的,不是吗?
- 出于基于成本/收益的实际目的,通常推荐什么级别的预反序列化检查 - 1. 全局、2. servlet、3. rpc、4. 对象参数?换句话说,上述每个反序列化前级别检查一方面的成本复杂性和另一方面的附加值大致是多少?
非常感谢。
【问题讨论】:
-
闻,闻,没有人想对我的问题开枪! :( 我想知道为什么不。
标签: apache security gwt tomcat rpc