一次解決儲存型xss和csrf漏洞的簡單方法

2021-07-02 17:59:20 字數 1187 閱讀 3213

目前我知道的,儲存型xss解決方法:過濾轉義使用者輸入的指令碼、標籤,csrf漏洞解決方法:校驗referer、加token、加驗證碼

而referer校驗是針對存在referer的情況,因為某些請求的head裡沒有referer,這時不能判斷請求是非法的;加token,儲存在哪是個問題,如果儲存在session中,當集群部署時,session不同步會導致客戶端的token與處理請求的伺服器的token不一致;加驗證碼同樣的道理,而且對使用者體驗非常不好。

由於xss和csrf都是改變使用者請求引數來達到惡意攻擊的目的,所以,如果我們從引數改變這一點切入,就沒有問題了,做法很簡單:

將引數加密後傳遞,這樣請求被攔截篡改的引數將不能被伺服器解密,因而拒絕請求。

前台需要兩個加密方法:

1、md5加密 引數列表

2、des加密 引數列表進行md5加密的順序

後台需要乙個加密和乙個解密方法:

1、同樣的md5加密方法

2、des解密方法

引數列表中引數均為請求傳遞引數,引數值為空的可過濾掉

需要為解決漏洞而新增的幾個引數:

1、sign簽名:引數列表引數md5加密後字串,比如引數id=1&name=tobey black&***=baby,那麼假設通過md5加密(增加隨機數等這裡略):

md5(1,'tobey black','baby')得到123g1jh123g(由於不能解密所以無法偽造)。

2、order引數順序:引數列表中引數進行md5加密的順序,根據1得到引數加密順序為id,name,***,對"id,name,***"進行des加密。

3、filter被過濾特殊字元的引數:考慮到當引數值含有特殊字元如單引號、空格、換行、尖括號等進行md5加密的結果前後臺不一致(js對這些字元進行轉義),所以,這些引數要過濾特殊字元再md5處理,這裡對name進行過濾(多個還是用逗號拼接),得到tobeyblack,最後把它des加密。

現在就可以提交請求了,到後台處理方法:

將引數id=1&name=tobey black&***=baby進行遍歷,按照order中引數名的順序取出引數值,並對filter中出現的引數名的引數值進行特殊字元過濾,拼接成"1tobeyblackbaby",對其md5加密,得到值跟sign對比,正確才向下執行,否則攔截請求。

一次解決問題的經過

問題處理經過 tcaplus 出現的乙個奇怪的問題,現象描述如下 從不知道哪一天開始,公升級的時候全部掛起,restore 事務全部掛起,重啟任何程序都掛起.找來一幫大神幫忙看,發現tcapsvr 啟動的時候,被卡住了30秒,tcm 是發出啟動命令後5秒檢查程序是否啟動,這時就會報啟動失敗.如果去看...

一次解決IDEA所有 中文亂碼問題

中文亂碼問題分類 編碼普通中文亂碼 properties檔案中文亂碼 console控制台中文亂碼 搜尋框中文亂碼 svn注釋中文亂碼 問題截圖 2 properties檔案中文亂碼 4,搜尋框中文亂碼 5 svn注釋中文亂碼 解決方法 1 編碼普通中文亂碼 settings editor code...

記錄一次解決VScode字型問題經歷

vscode介面的預設設定不會全部在配置檔案中體現,如需修改,需先新增要修改的字段,再輸入要修改的值,比如此次修改字型,需要在配置檔案中手動加入 editor.fontfamily 字段,如果需要對單個工程進行修改,需要修改工程內.vscode裡的配置檔案settings.json,而如果需要更改乙...