1 resttemplate与close_wait

背景,植入resttemplate请求对外数据,发现每次请求会新建一个连接,而且完了也不关,显示close_wait,显然,在1分钟establish状态后,对方发起fin,我方ack,然后没有发fin,到这四次挥手就中断了

 小事故合集_解决方案

 

先要证明iframe不能跨端口

 

小插曲,本地可以,线上不行,

因为本地使用jetty,没有x-frame-options:SAMEORIGIN(注意,该x-frame-options对chrome大小写不敏感)

而线上由tomcat/conf/web.xml统一打开了

84



<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
// 以下为额外添加
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
<filter>


 

小事故合集_解决方案_02 

小事故合集_java_03

看上去tomcat也没给机会

 

解决方案

生产:代理服务器

P.80 ? app=A80 iframe

P.80 ? app=A8080

P.80 ? app=A8081

P.80 ? app=A8082

 

开发;

fiddler篡改response,删掉X-Frame-Options

 

 

 

interface A

class A1 implements A

class A2 implements A

 

guice注入A1,A2,按名称

在aop中控中,用getBeanByClass形式去拿,是拿不到的,反哺失败

这里同事有个误区,A1,A2本身没有使用aop切面,直接注入原对象,为什么会报错

如下:

B {

  inject

  name(A_A1)

 

  private A A1's object

};

cglib B = cglib(new B)

当反哺时,用A这个类型去取bean,是取不到的;考究的做法是,读取待反哺对象的name注解,如果有,则通过名称去bean里取

0

 

 

4 http response splitting

82

4.1 本地的jetty以

reponse.setRedirect(url + "\r\nHACK:hh\r\n\r\n")

并不能完成攻击,根据抓包,发现jetty将\r\n换为空格(%20)了

4.2 URLEncode.encode(url) 会导致非法url,  结论一致,urlencode会encode :/?=,本质是为了将用户的数据转义,如果将正常的url也转义了,那么url也就不合法了,正确的做法是对url中的\r\n替换为""

4.3 sendredirect会组装一个http

302

Location:url 在response中植入一个Location头

 

 

 

 

5 java与javac不一致

java -jar时,发现用的是C:\Program Files (x86)\Common Files\Oracle\Java\javapath,32位的

而用的jstack是64的,所以就不行了

 

解决:在idea terminal中吧path设置到64的java

 

 

6 iframe跨域cookie

发现调试时(跨域,用fiddler篡改response报文,删除X-Frame-Options)网站能够被iframe嵌入(这可以理解)的同时,居然跨域带cookie

发现该cookie勾选了Secure,SameSite为空

 



 

经过调查,跨域设置SameSite=None和Secure时,谷歌浏览器才会发送Cookie

小事故合集_tomcat_04

 


 

 

经过调查,跨域设置SameSite=None和Secure时,谷歌浏览器才会发送Cookie

小事故合集_tomcat_04