GWT-RPC,阿帕奇,Tomcat服务器数据大小检查(GWT-RPC, Apache, Tomca

2019-10-30 04:38发布

在跟进这个GWT-RPC的问题(和答案#1)重。 场大小检查 ,我想知道,检查前反序列化发送到服务器的最大数据大小的正确方法,像如果请求数据大小> X,则中止请求 。 估值的简单性和基于对上述问题/答案的答案,我倾向于相信检查最大总请求大小就足够了,更细致的检查(即实地检查)可能会被推迟到反序列化后,但我愿意接受任何最佳实践的建议。

感兴趣的技术堆栈:与Apache-Tomcat的前端Web服务器GWT-RPC客户端服务器通信。

我想的第一步骤将是全局限制任何请求的大小(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. 凡/如何配置任何请求的最大尺寸 - 即,1 MB在我上面的例子吗? 我相信这是在httpd.conf LimitRequestBody但不是100%肯定它是否是实现这一目的的唯一参数。
  2. 如果可能的话,哪里/如何配置每servlet的最大尺寸-即在我的servlet任何RPC是1 MB最大尺寸?
  3. 如果可能的话,哪里/如何配置每个RPC请求/检查最大尺寸-即,最大RPC1大小为50 KB,最大RPC2大小为1 MB?
  4. 如果可能的话,其中/如何配置每RPC请求参数/检查最大尺寸- ,是10 KB,b为40 KB,c为1 MB,和d是1 KB。 我怀疑这是有实际意义的做,反序列化后,不是吗?
  5. 对于基于成本/效益的实际用途,一般建议是什么级别的反序列化预检的 - 1.全球性的,2。servlet中,3 RPC,4,对象的说法? 换句话说,什么是大致一方面成本的复杂性和对上述各反序列化前的水平检查的另一方面的附加值?

感谢很多提前。

Answer 1:

基于因为我问的问题,我自己的答案和战略,直到有人能告诉我更好的是我已经学会:

  1. 国防和检查的第一行是Apache的LimitRequestBody在httpd.conf设定。 它是在所有的servlet全部RPC调用的整体最大。
  2. 第二道防线是servlet的预反序列化通过重写GWT AbstractRemoteServiceServlet.readContent。 举例来说,一个能做到这一点如下图所示进一步,我想。 这是我在这个问题捞的心脏。
  3. 然后可以进一步检查每个RPC调用的参数后反序列化。 人们可以方便地使用JSR 303的验证都在服务器端和客户端-请参阅参考资料的StackOverflow和GWT再客户端。

例如如何覆盖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。

从安全角度来看,这一策略似乎相当合理的,我来控制数据用户规模发送到服务器。



文章来源: GWT-RPC, Apache, Tomcat server data size checking