1 XSS
跨?站指令碼(英語: Cross-site scripting ,通常簡稱為: XSS )是?種?站應(yīng)?程式的安全漏洞攻擊,是代碼注?的?種。
它允許惡意使?者將程式碼注?到??上,其他使?者在觀看??時(shí)就會(huì)受到影響。這類攻擊通常包含了 HTML 以及使?者端腳
本語?
XSS 分為三種:反射型,存儲(chǔ)型和 DOM-based
如何攻擊
- XSS 通過修改 HTML 節(jié)點(diǎn)或者執(zhí)? JS 代碼來攻擊?站。
- 例如通過 URL 獲取某些參數(shù)
<!-- http://www.domain.com?name=<script>alert(1)</script> -->
<div>{{name}}</div>
上述 URL 輸?可能會(huì)將 HTML 改為 <div><script>alert(1)</script></div> ,這樣??中就憑空多了?段可執(zhí)?腳本。這種攻
擊類型是反射型攻擊,也可以說是 DOM-based 攻擊
如何防御
最普遍的做法是轉(zhuǎn)義輸?輸出的內(nèi)容,對(duì)于引號(hào),尖括號(hào),斜杠進(jìn)?轉(zhuǎn)義
function escape(str) {
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/"/g, "&quto;");
str = str.replace(/'/g, "&##39;");
str = str.replace(/`/g, "&##96;");
str = str.replace(/\//g, "&##x2F;");
return str
}
通過轉(zhuǎn)義可以將攻擊代碼 <script>alert(1)</script> 變成
escape('<script>alert(1)</script>')
對(duì)于顯示富?本來說,不能通過上?的辦法來轉(zhuǎn)義所有字符,因?yàn)檫@樣會(huì)把需要的格式也過濾掉。這種情況通常采??名單過濾的辦法
,當(dāng)然也可以通過?名單過濾,但是考慮到需要過濾的標(biāo)簽和標(biāo)簽屬性實(shí)在太多,更加推薦使??名單的?式
var xss = require("xss");
var html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>'
console.log(html);
以上示例使?了 js-xss 來實(shí)現(xiàn)??梢钥吹皆谳敵鲋斜A袅?h1 標(biāo)簽且過濾了 script 標(biāo)簽
2 CSRF
跨站請(qǐng)求偽造(英語: Cross-site request forgery ),也被稱為 one-click attack 或者 session riding ,通常縮寫為CSRF 或者 XSRF ,是?種挾制?戶在當(dāng)前已登錄的 Web 應(yīng)?程序上執(zhí)??本意的操作的攻擊?法CSRF 就是利??戶的登錄態(tài)發(fā)起惡意請(qǐng)求
如何攻擊
假設(shè)?站中有?個(gè)通過 Get 請(qǐng)求提交?戶評(píng)論的接?,那么攻擊者就可以在釣??站中加??個(gè)圖?,圖?的地址就是評(píng)論接?
<img src="http://www.domain.com/xxx?comment='attack'"/>
如何防御
- Get 請(qǐng)求不對(duì)數(shù)據(jù)進(jìn)?修改
- 不讓第三??站訪問到?戶 Cookie
- 阻?第三??站請(qǐng)求接?
- 請(qǐng)求時(shí)附帶驗(yàn)證信息,?如驗(yàn)證碼或者 token
3 密碼安全
加鹽
對(duì)于密碼存儲(chǔ)來說,必然是不能明?存儲(chǔ)在數(shù)據(jù)庫中的,否則?旦數(shù)據(jù)庫泄露,會(huì)對(duì)?戶造成很?的損失。并且不建議只對(duì)密碼單純
通過加密算法加密,因?yàn)榇嬖诓屎绫淼年P(guān)系
- 通常需要對(duì)密碼加鹽,然后進(jìn)??次不同加密算法的加密
sha256(sha1(md5(salt + password + salt)))
但是加鹽并不能阻?別?盜取賬號(hào),只能確保即使數(shù)據(jù)庫泄露,也不會(huì)暴露?戶的真實(shí)密碼。?旦攻擊者得到了?戶的賬號(hào),可以通過
暴?破解的?式破解密碼。對(duì)于這種情況,通常使?驗(yàn)證碼增加延時(shí)或者限制嘗試次數(shù)的?式。并且?旦?戶輸?了錯(cuò)誤的密碼,也不
能直接提示?戶輸錯(cuò)密碼,?應(yīng)該提示賬號(hào)或密碼錯(cuò)誤
前端加密
雖然前端加密對(duì)于安全防護(hù)來說意義不?,但是在遇到中間?攻擊的情況下,可以避免明?密碼被第三?獲取