防止跨站指令碼攻擊 XSS指令碼注入

2021-10-20 11:45:31 字數 4821 閱讀 2481

可能會竊取或操縱客戶會話和 cookie,它們可能用於模仿合法使用者,從而使黑客能夠以該使用者身份檢視或變更使用者記錄以及執行事務

在使用者提交的時候 判斷指令碼並且去掉相關資訊

;// 執行xss清理

//這裡會把前台傳過來的json需要的資料格式化 使得json序列化錯誤

//所以需要把 {} \ 處理掉

log.

debug

("[{}:{}] xss處理前引數:{}"

, method, uri.

getpath()

, bodystring)

; bodystring = xssutil.instance.

cleanxss

(bodystring)

; bodystring = bodystring.

replace

("\\\""

,"\"");

bodystring = bodystring.

replace

("\"\""

,"}");

bodystring = bodystring.

replace

("\"["

,"[");

bodystring = bodystring.

replace

("]\""

,"}");

log.

info

("[{}:{}] 引數:{}"

;// 重新構造body

byte

newbytes = bodystring.

getbytes

(standardcharsets.utf_8)

; databuffer bodydatabuffer =

todatabuffer

(newbytes)

; flux

bodyflux = flux.

just

(bodydatabuffer)

;// 重新構造header

;// 由於修改了傳遞引數,需要重新設定content_length,長度是位元組長度,不是字串長度

// 重寫serverhttprequestdecorator,修改了body和header,重寫getbody和getheaders方法

* 是否是白名單

** @param url 路由

* @param method 請求方式

* @return true/false

*/private

boolean

white

(string url, string method)

/** * 位元組陣列轉databuffer

** @param bytes 位元組陣列

* @return databuffer

*/private databuffer todatabuffer

(byte

bytes)

public

static

final

int order =10;

@override

public

intgetorder()

@data

@validated

@allargsconstructor

@noargsconstructor

@builder

private

static

class

xsswhiteurl

public

enum xssutil

}return jsonobject.

tojsonstring()

;}/** * 清除json陣列中的xss攻擊字元

** @param val json陣列字串

* @return 清除後的json陣列字串

*/private string cleanarr

(string val)

return jsonobject.

tojsonstring

(result);}

/** *

* @param str 字串

* @return 清除後無害的字串

*/public string cleanxss

(string str)

else

if(jsonutil.instance.

isjsonarr

(str)

)else

string afterclean = jsoup.

clean

(str,

"", custom_whitelist, output_settings);if

(paramerror

(richtext, afterclean, str)

) str = richtext ? afterclean :

this

.backspecialstr

(afterclean);}

return str;

}/**

* 判斷是否是富文字

** @param str 待判斷字串

* @return true/false

*/private

boolean

richtext

(string str)

/** * 判斷是否引數錯誤

** @param richtext 是否富文字

* @param afterclean 清理後字元

* @param str 原字串

* @return true/false

*/private

boolean

paramerror

(boolean richtext, string afterclean, string str)

// 如果清理後的字元和清理前的字元匹配,那麼不是引數錯誤

if(objects.

equals

(str, afterclean)

)// 如果僅僅包含可以通過的特殊字元,那麼不是引數錯誤

if(objects.

equals

(str,

this

.backspecialstr

(afterclean)))

// 如果還有......

return

true;}

/** * 轉義回特殊字元

** @param str 已經通過轉義字元

* @return 轉義後特殊字元

*/private string backspecialstr

(string str)

}

跨站指令碼攻擊 XSS

跨站指令碼攻擊,cross site script,為了區別css,英文縮寫為xss xss攻擊,通常指hacker通過 html注入 篡改了網頁,插入惡意的指令碼,從而在使用者瀏覽網頁時,控制使用者瀏覽器的一種攻擊。xss根據效果的不同可以分為如下幾類 1.反射型xss 通過將使用者輸入的資料 反...

Xss跨站指令碼攻擊

1.內容 攻擊者在web網頁中插入惡意js 當使用者瀏覽該瀏覽器頁面的時候,嵌入web中的js 會被執行,從而受到惡意攻擊,這就是跨站指令碼攻擊。xss指令碼植入方式前台接收資料存入資料庫,在渲染頁面時從資料庫中讀取相應資訊 2 分類 1 反射性的xss 發出請求時,xss 出現在url中,作為輸入...

xss 跨站指令碼攻擊

這是乙個非常簡單的攻擊。兩個頁面如下 out.print request.getparameter content 如果攻擊者在輸入框裡面輸入以下內容 那麼就有以下結果 當然,使用者還可以輸入 不僅可以注入script,還可以直接注入html http localhost 8080 test myj...