1 resttemplate與close_wait
背景,植入resttemplate請求對外資料,發現每次請求會建立一個連接配接,而且完了也不關,顯示close_wait,顯然,在1分鐘establish狀态後,對方發起fin,我方ack,然後沒有發fin,到這四次揮手就中斷了
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5iMiJTNzYDNhFmMihTY4MmMmRWNjNjZilzN4cjY3gzYi9CX3AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.jpeg)
先要證明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