跟进this GWT-RPC question (and answer #1) re. field size checking,我想知道检查发送到服务器的最大数据大小的预反序列化的正确方法,如请求数据大小> ; 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;
假设我大致知道以下最大尺寸:
然后我希望以下最大尺寸:
在本例中,我的问题是:
非常感谢。
答案 0 :(得分:0)
根据自从我提出这个问题后所学到的知识,我自己的答案和策略,直到有人能够更好地向我展示:
有关如何覆盖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;
}
如果>是最大请求大小,请参阅this question 2GB。
从安全角度来看,这个策略对我控制用户发送到服务器的数据大小似乎很合理。