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

Thursday, 18 February, 2016 5:03 PM


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

问题如下


https://jerry-storefront-ui-test-v1.us-east.cf.yaas.io///example.com/a 这个URL会redirect到example.com/a/ (请拷贝https://jerry-storefront-ui-test-v1.us-east.cf.yaas.io///example.com/a,而不是直接点击)


https://jerry-agenthome-ui-test-v1.us-east.cf.yaas.io///example.com/a/ 这个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?

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

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


http://scn.sap.com/docs/DOC-53666


但是这个case,https://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.

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

http://kodejava.org/how-do-i-send-a-response-status-in-servlet/


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


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


上一篇:探秘Java9


下一篇:《windows核心编程》笔记(三)