关于Tomcat如何处理Open Redirect的问题

97 阅读1分钟

Thursday, 18 February, 2016 5:03 PM

最近处理security issue的时候,遇到一个问题。由于对tomcat的机制不是很熟悉,所以没啥头绪。
问题如下

  1. jerry-storefront-ui-test-v1.us-east.cf.yaas.io///example.c… 这个URL会redirect到example.com/a/ (请拷贝https://jerry-storefront-ui-test-v1.us-east.cf.yaas.io///example.com/a,而不是直接点击)
  2. jerry-agenthome-ui-test-v1.us-east.cf.yaas.io///example.c… 这个URL就会报资源没法找到(请拷贝https://jerry-agenthome-ui-test-v1.us-east.cf.yaas.io///example.com/a/,而不是直接点击)

两个差不多的URL,但是得到不同的处理。我猜想应该是使用的tomcat版本不同或者tomcat的配置不同。但是我不知道用什么方法去验证这个猜想。

为什么第一个请求会先返回303 error,然后再去取一次,于是遇到404 error,而第二个请求没有重定向,直接404 not found error?

clipboard1

我以前在ABAP里处理过类似的重定向问题,因为SAP的netweaver也能作为web server用,所以在ABAP里要实现来一个url,动态决定其response code,比如200还是303,404 都是可以通过配置或者写代码来实现的:

scn.sap.com/docs/DOC-53…

但是这个case,jerry-storefront-ui-test-v1.us-east.cf.yaas.io这个url到底是run在什么server上的。Tomcat?
我在https://tomcat.apache.org/里看到了status code 303对应定义的constant SC_SEE_OTHER.

clipboard2

clipboard3

clipboard4

如果url是Tomcat的servlet 服务的话,据我所知这些status code只可能是Servlet实现里set进去的,像这样:
clipboard5

kodejava.org/how-do-i-se…

所以最准确的办法就是找到Servlet实现的代码,看代码在什么情况下会抛出SC_SEE_OTHER.

Tomcat除了通过Servlet写代码实现给Response赋上不同的status code之外,是否还能通过配置xml的方式,做到不同的url进来,自动响应以不同的status code?

要获取更多Jerry的原创文章,请关注公众号"汪子熙":