天天看點

小事故合集

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

小事故合集
小事故合集

看上去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裡取

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

小事故合集
小事故合集