小事故合集

1 resttemplate与close_wait

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

 

在以前的tcp实际中也有碰到过,客户端没有close导致不发fin包的经历 17tcp close端口占用 & setReuseAddress 【本地】

 解决方案,改连接池

2 iframe 跨端口

背景

A.80 iframe 3个网站

A.8080,A.8081,A.8082

24netty(二十)http代理服务器【重点】背景一致

先要证明iframe不能跨端口

http://localhost:8080/wechat-demo/iframe.html

http://localhost:8990/ss

/Users/mac/work/netty-test/src/main/java/com/jds/test/http/BodyToResponseEncoder.java

/Users/mac/work/netty-test/src/main/java/com/jds/test/websocket/WebSocketServerJob.java

/Users/mac/Documents/apache-tomcat-8.5.11/webapps/wechat-demo/iframe.html

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

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

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

参考:https://blog.csdn.net/liangpingguo/article/details/86703284

<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>

 

看上去tomcat也没给机会

解决方案

生产:代理服务器

P.80 ? app=A80 iframe

P.80 ? app=A8080

P.80 ? app=A8081

P.80 ? app=A8082

开发;

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

3 接 当动态代理遇到ioc (四)真正的cglib

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里取

当动态代理遇到ioc (四)真正的cglib 。10

4 http response splitting

https://blog.csdn.net/qq_35976271/article/details/103276682

4.1 本地的jetty以

reponse.setRedirect(url + " HACK:hh ")

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

4.2 URLEncode.encode(url) 会导致非法url,浏览器认不出,与30multipart/form-data和application/x-www-form-urlencoded的区别(二)urlencoded之自动deocde   结论一致,urlencode会encode :/?=,本质是为了将用户的数据转义,如果将正常的url也转义了,那么url也就不合法了,正确的做法是对url中的 替换为""

4.3 sendredirect会组装一个http

302

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

5 java与javac不一致

java -jar时,发现用的是C:Program Files (x86)Common FilesOracleJavajavapath,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

原文地址:https://www.cnblogs.com/silyvin/p/14715123.html