1.CSRF
2.XSS基本概念
攻擊原理
防御措施
CSRF
-
CSRF基本概念
CSRF通常稱為跨站請求偽造,英文名 Cross-site request forgery
-
CSRF攻擊原理
用戶--------->訪問-------------------->網(wǎng)站A
用戶<---------下發(fā)cookie<-----------網(wǎng)站A
用戶--------->訪問----------->網(wǎng)站B
用戶<---------引誘點擊<-----------網(wǎng)站B
用戶--------->訪問-------------------->網(wǎng)站A
前提:
1.網(wǎng)站中某一借口存在漏洞
2.用戶在注冊網(wǎng)站時登錄過
CSRF防御措施
1.Token驗證
2.Referer驗證---->頁面來源
3.隱藏令牌
區(qū)別:
- XSS向頁面注入JS,在JS函數(shù)體做他想做的事
- CSRF利用本身漏洞峭拘,幫你自動執(zhí)行那些借口氛雪,依賴于用戶登錄網(wǎng)站
XSS
http://www.freebuf.com/articles/web/40520.html
http://www.imooc.com/learn/812
-
XSS基本概念
XSS 跨域腳本攻擊蚌吸,英文名 cross-site scripting
XSS攻擊方式
1.反射型
2.存儲型
攻擊手段:
1.盜用cookie赶舆,獲取一些敏感信息。
2.破壞正常的頁面結(jié)構(gòu)焙格,出入一些惡心內(nèi)容。
3.利用植入flash(flash現(xiàn)在不常用夷都,了解一下就好)眷唉。
4.實現(xiàn)分布式拒絕服務攻擊(D-DOS攻擊)(最難以防御)。
5.server-limit-dos:當HttpRequestHeader過長的時候囤官,WebServer會產(chǎn)生400或者4開頭的錯誤厢破,如果這些超長的數(shù)據(jù)保存到cookie中,能讓用戶每次訪問的時候造成http超長治拿,會導致一些用戶無法訪問服務器摩泪。
*DOS:最基本的DOS是利用合理的客戶端請求來占用過多的服務器資源,從而使合法用戶無法得到服務器的響應劫谅。
*D-DOS:D-DOS攻擊手段就是在傳統(tǒng)的DOS之上產(chǎn)生的一類攻擊方式见坑。
反射性:發(fā)出請求時,XSS代碼出現(xiàn)在URL中捏检,作為輸入提交到服務器端荞驴,服務器解析后響應,XSS代碼隨響應內(nèi)容一起傳回瀏覽器贯城,最后瀏覽器解析XSS代碼熊楼,這個過程像一次反射,故成反射性XSS能犯。
1.明文的
2.有些參數(shù)是通過search傳入的鲫骗,服務器要解析search犬耻,而這個search的value部分就是XSS代碼,從而導致服務端把攻擊腳本做了解析执泰。
3.服務端解析了XSS代碼枕磁,然后下發(fā)給瀏覽器,下發(fā)的通常都是javascript术吝,瀏覽器在解析DOM樹的時候遇到這段代碼會一并解析计济。
示例:
//服務端(node):
router.get('/',function(req,res,next){
res.render('index',{title:'Express',xss:req.query.xss})
})
//視圖層
<div>
<%- xss %>
//=和-的區(qū)別:要不要對html進行轉(zhuǎn)義,如果允許輸出html這里不需要轉(zhuǎn)義排苍,就用-
</div>
//url
localhost:3000/?xss=這里可以寫xss攻擊的內(nèi)容
//比如
localhost:3000/?xss=![](null)
//寫完的img會加入到頁面中沦寂,因為img的src為null,應該自動執(zhí)行onerror淘衙,
//瀏覽器會自動幫你攔截凑队,如果把瀏覽器的攔截關(guān)掉的話,會發(fā)生什么
//在服務端關(guān)閉攔截:
router.get('/',function(req,res,next){
res.set('X-XSS-Protection',0);//關(guān)掉瀏覽器攔截xss
res.render('index',{title:'Express',xss:req.query.xss})
})
//此時會成功執(zhí)行
- xss腳本在url中
- 服務端要解析url的字段
?xss=![](null)
//自動觸發(fā)img src為null 上面有個onerror屬性
?xss=<p onclick="alert('1')">點我</p>
//引誘觸發(fā)
?xss=<iframe src="www.baidu.com"></iframe>
//頁面中會嵌入一個頁面幔翰,能實現(xiàn)各種廣告的植入
存儲型:存儲型XSS和反射性XSS的差別在于漩氨,提交的代碼會存儲在服務端(數(shù)據(jù)庫,內(nèi)存遗增,文件系統(tǒng)等)叫惊,下次請求目標頁面時不用再提交xss代碼。(反射性是存儲在url中)
//服務端(node):
router.get('/',function(req,res,next){
res.render('index',{title:'Express',xss:sql()})
//通過讀緩存做修,讀數(shù)據(jù)庫霍狰,最后返回,這里的來源不一樣饰及,后面的都和反射性一樣
})
存儲型的攻擊腳本是怎么到達服務端的存儲系統(tǒng)里的蔗坯?
XSS防范措施
1.編碼
2.過濾
3.矯正
- 不能對所用用戶的輸入保持原樣
- 在原樣顯示用戶內(nèi)容時,要過濾
- 破壞頁面結(jié)構(gòu)則通過矯正
編碼:對用戶輸入的數(shù)據(jù)進行HTML Entity編碼
過濾:
1.移除用戶上傳的DOM屬性燎含,如onerror等(最好移除所有DOM事件屬性)
2.移除用戶上傳的Style節(jié)點宾濒,Script節(jié)點,Iframe節(jié)點等屏箍。
矯正:
1.避免直接對HTML Entity解碼
2.使用DOM Parse轉(zhuǎn)換绘梦,矯正不配對的DOM標簽
- 如果直接解碼,那么過濾意義就不大了
- DOM Parse把整個文本解析成DOM對象