重新跟踪这个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;
假设我大概知道以下最大大小:
然后,我期望以下最大大小:
在此示例的上下文中,我的问题是:
在此先感谢。
根据我提出问题以来所学的知识,直到有人可以更好地向我展示我的答案和策略是:
有关如何重写AbstractRemoteServiceServlet.readContent的示例:
@Override protected String readContent(HttpServletRequest request) throws ServletException, IOException { final int contentLength = request.getContentLength(); // _maxRequestSize should be large enough to be applicable to all rpc calls within this servlet. if (contentLength > _maxRequestSize) throw new IOException("Request too large"); final String requestPayload = super.readContent(request); return requestPayload; }
如果最大请求大小大于2GB,请参阅此问题。
从安全角度来看,这种策略对我来说控制用户发送到服务器的数据大小似乎是非常合理的。