Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT-RPC、Apache、Tomcat服务器数据大小检查_Apache_Security_Gwt_Tomcat_Rpc - Fatal编程技术网

GWT-RPC、Apache、Tomcat服务器数据大小检查

GWT-RPC、Apache、Tomcat服务器数据大小检查,apache,security,gwt,tomcat,rpc,Apache,Security,Gwt,Tomcat,Rpc,接下来,我想知道检查预反序列化发送到服务器的最大数据大小的正确方法,比如if request data size>X然后中止请求。重视简单性并基于对上述问题/答案的回答,我倾向于认为检查最大总体请求大小就足够了,更细粒度的检查(即字段级检查)可以推迟到反序列化后进行,但我愿意接受任何最佳实践建议 感兴趣的技术堆栈:GWT-RPC客户机服务器与ApacheTomcat前端web服务器的通信 我认为第一步是全局限制任何请求的大小(httpd.conf中的LimitRequestBody或/和其他?)

接下来,我想知道检查预反序列化发送到服务器的最大数据大小的正确方法,比如if request data size>X然后中止请求。重视简单性并基于对上述问题/答案的回答,我倾向于认为检查最大总体请求大小就足够了,更细粒度的检查(即字段级检查)可以推迟到反序列化后进行,但我愿意接受任何最佳实践建议

感兴趣的技术堆栈:GWT-RPC客户机服务器与ApacheTomcat前端web服务器的通信

我认为第一步是全局限制任何请求的大小(httpd.conf中的LimitRequestBody或/和其他?) 是否有更细粒度的检查,如可以为每个RPC请求设置的检查?如果是,在哪里,如何?细粒度检查在一个全局设置中带来多少安全值

为了用一个示例更具体地阐述这个问题,我们假设在同一个servlet上有以下两个RPC请求签名:

public void rpc1(A a, B b) throws MyException;
public void rpc2(C c, D d) throws MyException;
假设我大致知道以下最大尺寸:

  • a:10KB
  • b:40KB
  • c:1MB
  • d:1KB
然后,我预计以下最大尺寸:

  • rpc1:50KB
  • rpc2:1 MB
在这个例子中,我的问题是:

  • 在何处/如何配置任何请求的最大大小——例如,在上面的示例中为1MB?我相信它是httpd.conf中的LimitRequestBody,但不能100%确定它是否是用于此目的的唯一参数
  • 如果可能,在哪里/如何配置每个servlet的最大大小——即,我的servlet中任何rpc的最大大小都是1MB
  • 如果可能,在何处/如何配置/检查每个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在httpd.conf中设置的LimitRequestBody。它是所有servlet中所有rpc调用的总最大值
  • 第二道防线是通过覆盖GWT AbstractRemoteServiceServlet.readContent进行servlet预反序列化。例如,我想你可以按照下面的说明来做。这就是我在这个问题上的核心所在
  • 然后可以在反序列化后进一步检查每个rpc调用参数。可以方便地在服务器端和客户端使用JSR303验证——请参阅参考资料和r.e.客户端
  • 有关如何重写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,请参阅最大请求大小


    从安全角度来看,我认为这种策略在控制用户发送到服务器的数据大小方面非常合理。

    嗅探,嗅探,没有人想尝试我的问题!:(我不知道为什么不。