跟进这个 GWT-RPC 问题(和答案#1)。字段大小检查,我想知道检查预反序列化以获取发送到服务器的最大数据大小的正确方法,例如如果请求数据大小 > X 然后中止请求。重视简单性并基于上述问题/答案的答案,我倾向于相信检查最大整体请求大小就足够了,更细粒度的检查(即字段级别检查)可以推迟到反序列化后,但我愿意接受任何最佳实践建议。
感兴趣的技术栈:与 Apache-Tomcat 前端 Web 服务器的 GWT-RPC 客户端-服务器通信。
我想第一步是全局限制任何请求的大小(httpd.conf 中的LimitRequestBody或/和其他?)。
是否有更细粒度的检查,比如可以为每个 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兆字节
- 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. 对象参数?换句话说,上述每个反序列化前级别检查一方面的成本复杂性和另一方面的附加值大致是多少?
提前非常感谢。