一、攻擊手段
主動攻擊: 直接向應(yīng)用服務(wù)器發(fā)起攻擊,傳入代碼,比如OS注入、SQL注入。 被動攻擊:誘導(dǎo)客戶操作,向服務(wù)器發(fā)送植入非法代碼的請求,比如CSRF、XSS。 主動與否的判斷依據(jù):攻擊的直接發(fā)起者是普通用戶還是攻擊者。
JS注入 解決方法:HTML編碼 如:<%=Html.Encode(feedback.Message)%> HTML5引入的新標(biāo)簽包括、、、
、等等,而這些標(biāo)簽又有一些有趣的屬性,例如poster、autofocus、onerror、formaction、oninput,這些屬性都可以用來執(zhí)行javascript。這會導(dǎo)致XSS和CSRF跨域請求偽造。
1.SQL注入
非法修改SQL語句。
2.OS命令注入攻擊
通過web應(yīng)用調(diào)用操作系統(tǒng)命令,通過shell命令可以調(diào)用操作系統(tǒng)的其它程序,只要有能夠調(diào)用shell函數(shù)的地方就有被攻擊的風(fēng)險。
3.HTTP首部注入
在響應(yīng)首部加入換行符(HTTP換行符:%0D%0A),設(shè)置cookie信息,假冒用戶。 (1)HTTP響應(yīng)截斷攻擊:需要插入兩個HTTP換行符,然后并排插入字符串發(fā)送,插入的字符串是偽造的響應(yīng)主體(網(wǎng)頁內(nèi)容)。可以達到和跨站腳本攻擊相同的效果。
4.郵件首部注入
向郵件首部To/Subject任意添加非法內(nèi)容,可以對任意郵件發(fā)送廣告郵件或者病毒郵件。
5.目錄遍歷攻擊(directory traversal)
非法訪問服務(wù)器其它文件路徑,比如/etc/passed。
6.XSS(跨站腳本攻擊,cross-site script)
(1)表單 在URL添加JavaScript代碼,獲取用戶表單信息,并且提交到攻擊者的服務(wù)器。 (2)cookie 保護cookie:httponly——服務(wù)端設(shè)置Set-Cookie: user=t=bfabf0b1c1133a822; path=/; HttpOnly (3)顯示偽造的圖片、文章 xss防范:
方法一:
阻止 JavaScript 注入攻擊的一種簡單方法是重新在視圖中顯示數(shù)據(jù)時,用 HTML 編碼任何網(wǎng)站用戶輸入的數(shù)據(jù) 如:<%=Html.Encode(feedback.Message)%> 使用 HTML 編碼一個字符串的含意是什么呢?使用 HTML 編碼字符串時,危險字符如 < 和 > 被替換為 HTML 實體,如 < 和 >。所以,當(dāng)使用 HTML 編碼字符串 。瀏覽器在解析編碼的字符串時不再執(zhí)行 JavaScript 腳本。而是顯示無害的頁面。 方法二:
除了在視圖中顯示數(shù)據(jù)時使用 HTML 編碼數(shù)據(jù),還可以在將數(shù)據(jù)提交到數(shù)據(jù)庫之前使用 HTML 編碼數(shù)據(jù)。 StringEscapeUtils.escapeHtml(“前臺提交的數(shù)據(jù)”);
通常,人們喜歡使用本教程中討論的第一種方法,而不喜歡使用第二種方法。第二種方法的問題在于在數(shù)據(jù)庫中最終會保留 HTML 編碼的數(shù)據(jù)。換言之,數(shù)據(jù)庫中的數(shù)據(jù)會包含奇怪的字符。這有什么壞處呢?如果需要用除網(wǎng)頁以外的形式顯示數(shù)據(jù)庫數(shù)據(jù),則將遇到問題。例如,不能輕易在 Windows Forms 應(yīng)用程序中顯示數(shù)據(jù)。
7.會話固定攻擊(session fixation)
訪問登錄頁面,利用服務(wù)器返回的URL誘導(dǎo)用戶前去認(rèn)證,再用用戶的會話ID去登錄網(wǎng)站。
8.CSRF(跨站點請求偽造,cross-site request forgeries)
利用已經(jīng)認(rèn)證的用戶,向應(yīng)用服務(wù)器發(fā)送請求,完成相應(yīng)操作,比如發(fā)表言論,購買。 1、驗證HTTP Referer字段
在HTTP頭中有Referer字段,他記錄該HTTP請求的來源地址,如果跳轉(zhuǎn)的網(wǎng)站與來源地址相符,那就是合法的,如果不符則可能是csrf攻擊,拒絕該請求 2、在請求地址中添加token并驗證
這種的話在請求的時候加一個token,值可以是隨機產(chǎn)生的一段數(shù)字, token是存入數(shù)據(jù)庫之后,后臺返給客戶端的,如果客戶端再次登錄的時候, 后臺發(fā)現(xiàn)token沒有,或者通過查詢數(shù)據(jù)庫不正確,那么就拒絕該請求
如果想防止一個賬號避免在不同的機器上登錄,那么我們就可以通過token來判斷, 如果a機器登錄后,我們就將用戶的token從數(shù)據(jù)庫清除,從新生成, 那么另外一臺b機器在執(zhí)行操作的時候,token就失效了,只能重新登錄,這樣就可以防止兩臺機器登同一賬號 3、在HTTP頭中自定義屬性并驗證
如果說通過每次請求的時候都得加token那么各個接口都得加很麻煩, 那么我們通過http的請求頭來設(shè)置token 例如: $.ajax({ url: ‘/v1/api’, dataType: ‘json’, data: param, type:‘post’, headers: {‘Accept’:‘a(chǎn)pplication/json’,‘Authorization’:tokenValue} success:function(res){ console.log(res) } })
二、其它安全隱患
1.不能訪問沒有權(quán)限的文本內(nèi)容,卻能夠訪問圖片資源 2.不恰當(dāng)?shù)腻e誤信息拋出
- 數(shù)據(jù)庫管理系統(tǒng)拋出的錯誤
- 后臺應(yīng)用拋出的程序錯誤
- 前端校驗錯誤信息提示
3.開放重定向 4.密碼破解
- 密碼試錯 窮舉法 建立字典
- 對加密的密碼進行破解 密碼加密:密碼+salt –> md5(散列函數(shù))–> 保存散列值 破解方法:
- 窮舉法、字典 調(diào)用相同散列函數(shù)處理候選密碼得到散列值,與目標(biāo)散列值比對。
- 彩虹表 明文和散列值構(gòu)成的數(shù)據(jù)庫表。能夠提高效率。類似字典攻擊。
- 拿到密鑰
- 利用加密算法的漏洞
- 點擊劫持(clickjacking) 又稱界面?zhèn)窝b,誘導(dǎo)客戶點擊存在陷阱的按鈕或者鏈接。在合法頁面上設(shè)置透明的iframe頁面。
- DoS攻擊(denial of service attack) 又稱拒絕服務(wù)攻擊。 集中發(fā)送合法請求,消耗服務(wù)器資源。 DDoS攻擊(distributed denial of service attack):多臺計算機發(fā)送的DoS攻擊。一般利用已經(jīng)中毒的計算機作為工具發(fā)送DoS。
- 網(wǎng)站劫持? 使用 https
- 后門程序 分類: 開發(fā)階段作為debug調(diào)用的后門程序 開發(fā)者為了自身利益植入的后門程序 攻擊者設(shè)置的后門程序