❶ 關於javaweb項目的亂碼問題
把你的亂碼過濾器的filter配置在安全審核filter的前面 filter的執行順序會按照web.xml里配置的順序進行 如果先進行安全審核的filter, 安全審核的filter從request里獲得了數據 那麼之後在亂碼過濾的filter里在設置正確的編碼仍然是亂碼
❷ 【快學springboot】15、SpringBoot過濾XSS腳本攻擊
XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
簡而言之,就是作惡用戶通過表單提交一些前端代碼,如果不做處理的話,這些前端代碼將會在展示的時候被瀏覽器執行。
解決XSS攻擊,可以通過後端對輸入的數據做過濾或者轉義,使XSS攻擊代喚型消碼失效。
對於過濾XSS腳本的代碼,通過搜索引擎可以搜索到很多,但似乎都不是那麼全面。基本上都是只能過濾querystring(表單類型)類型的入參,而不能和知過濾json類型的入參。其實,在現在的開發中,更多的是使用json類型做數據交互。下面就直接貼代碼了:
這里重寫了兩個方法:getParameter和getParameterValues,getParameter方法是直接通過request獲得querystring類型的入參調用的方法。如果是通過springMVC註解類型來獲得參數的話,走的是getParameterValues的方法。大家可以通過列印一個輸出來驗證一下。
StringEscapeUtils.escapeHtml4這個方法來自Apache的工具類,maven坐標如下:
過濾的代碼寫完了,下面就是在一個filter中應用該代碼。
過濾表單類型的代碼已經完成(xssObjectMapper這個是後面過濾json類型才用到的)。下面來實現過濾json類型的代碼:
代碼如下:
這里是通過修改SpringMVC的json序列化來達到過濾xss的目的的。其實也可以通過第一種方法,重寫getInputStream方法來實現,這里我就不做演示了(通過json類型傳參會走getInputStream方法,通過重寫該方法列印輸出可以證明)。
TestController.java
下面通過postman測試下效果:
可以看到,js代碼已經經租笑過轉義。轉義過後的代碼,即使前端讀取過去了,也不會被瀏覽器執行的。
❸ java服務介面怎麼避免xss注入攻擊
過濾特定符號
publicstaticStringguolv(Stringa){
a=a.replaceAll("%22","");
a=a.replaceAll("%27","");
a=a.replaceAll("%3E","");
a=a.replaceAll("%3e","");
a=a.replaceAll("%3C","");
a=a.replaceAll("%3c","");
a=a.replaceAll("<","");
a=a.replaceAll(">","");
a=a.replaceAll(""","");
a=a.replaceAll("'","");
a=a.replaceAll("\+","");
a=a.replaceAll("\(","");
a=a.replaceAll("\)","");
a=a.replaceAll("and","");
a=a.replaceAll("or","");
a=a.replaceAll("1=1","");
returna;
}
❹ 如何正確防禦xss攻擊
傳統防禦技術
2.1.1基於特徵的防禦
傳統XSS防禦多採用特徵匹配方式,在所有提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法一般會需要對「javascript」這個關鍵字進行檢索,一旦發現提交信息中包含「javascript」,就認定為XSS攻擊。
2.1.2 基於代碼修改的防禦
和SQL注入防禦一樣,XSS攻擊也是利用了Web頁面的編寫疏忽,所以還有一種方法就是從Web應用開發的角度來避免:
1、對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度范圍內、採用適當格式、採用所預期的字元的內容提交,對其他的一律過濾。
2、實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
3、確認接收的的內容被妥善的規范化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。
當然,如上方法將會降低Web業務系統的可用性,用戶僅能輸入少量的制定字元,人與系統間的交互被降到極致,僅適用於信息發布型站點。
並且考慮到很少有Web編碼人員受過正規的安全培訓,很難做到完全避免頁面中的XSS漏洞。
(4)javaxssfilter擴展閱讀:
XSS攻擊的危害包括
1、盜取各類用戶帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
2、控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
3、盜竊企業重要的具有商業價值的資料
4、非法轉賬
5、強制發送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發起攻擊
受攻擊事件
新浪微博XSS受攻擊事件
2011年6月28日晚,新浪微博出現了一次比較大的XSS攻擊事件。
大量用戶自動發送諸如:
「郭美美事件的一些未注意到的細節」,「建黨大業中穿幫地方」,「讓女人心動的100句詩歌」,「這是傳說中的神仙眷侶啊」等等微博和私信,並自動關注一位名為hellosamy的用戶。
事件的經過線索如下:
20:14,開始有大量帶V的認證用戶中招轉發蠕蟲
20:30,某網站中的病毒頁面無法訪問
20:32,新浪微博中hellosamy用戶無法訪問
21:02,新浪漏洞修補完畢
網路貼吧xss攻擊事件
2014年3月9晚,六安吧等幾十個貼吧出現點擊推廣貼會自動轉發等。並且吧友所關注的每個關注的貼吧都會轉一遍,病毒循環發帖。並且導致吧務人員,和吧友被封禁。
❺ Struct2+Spring 架構JavaWeb項目,出現xss跨站腳本攻擊漏洞解決方案
沒用到富文本的話可以用spring里的HtmlUtils.htmlEscape(string str)來對parameter轉碼。是用filter還是其他方式都可以
❻ 如何在jetty伺服器層面解決XSS漏洞
一,給cookie的屬性設置為httponly
這樣能夠避免js讀取Cookie信息(設置後有助於緩解XSS,但是XSS除了劫持Cookie之外,還可以模擬用戶的身份進行操作)
二,進行輸入檢查
如果僅僅在客戶端通過JS來做輸入校驗,有可能會被攻擊者繞過,WEB開發中的普遍做法是同時在客戶端和服務端做校驗。這種輸入檢查的方式也稱之為XSS Filter。
三,輸出檢查
一般說來,除了富文本輸出之外,在變數輸出到HTML頁面時,可以使用編碼或者轉義的方式來防禦XSS攻擊。
四,防禦DOM BasedXSS
前面提到的集中方法,對於這種類型不太適用,需要特別對待,那如何才能防禦呢?
首先是$var輸出到<script>是,應該執行一次javasriptEncode,其次在doument.write輸出到HTML頁面時,如果是輸出到事件或者腳本,可以再做一次javaScriptEncode,如果是輸出到HTML內容或者屬性,則可以做一次HtmlEncode。
上面提到的這些防禦方法都屬於安全生產的環節,也就是說實在開發同學寫代碼的時候要特別注意,這種是否做的規范,可以通過工具掃描代碼的方式來實現,也就是白盒測試,如果代碼沒有做輸入或者輸出檢查,則發報告提示開發來進行修改。但是有些場景白盒沒法覆蓋到,例如輸出jsonp類型的介面,對於callback參數的原味輸出,白盒有時候就掃不出來,這時候,可以通過黑盒測試工具,模擬入參的各種情況,也就是窮舉,來構造,如果發生了XSS請求,則發出報告即可。