摘要:
公司要給近期專案檢測安全性,主要針對的是stored xss攻擊方式,借這次就在這裡好好總結一下,什麼是xss攻擊,為什麼會出現xss攻擊,xss攻擊有哪些種類,xss攻擊有什麼危害,以及cfrs攻擊。
什麼是xss攻擊:
xss攻擊全稱cross site scripting即跨站指令碼攻擊,這裡側重在指令碼上,主要是發生在瀏覽器層面上的攻擊方式,xss攻擊方式是針對圍繞著網頁中的dom元素不做特殊處理導致的指令碼執行。
xss攻擊由來:
有一些標籤是可以在瀏覽器渲染頁面的時候可以執行指令碼的,比如,script、img、iframe等等。如果在這些標籤裡加入一些可以獲取使用者資訊或者其他不能被暴露出來資訊的指令碼,這就是xss攻擊。
xss攻擊的種類:
xss攻擊方式有三種:(1)reflected xss(2)stored xss (3)dom-based xss
reflected xss:
反射性xss攻擊的攻擊方式是依賴於客戶端發起請求(該請求url中帶有可執行的指令碼元素),服務端返回指令碼被瀏覽器執行的方式進行攻擊。
栗子:
1237server端**:89click
1011
1228
29
1解決方案(具體針對後台是什麼語言引入特定庫)var express = require('express');
2var path = require('path');
3var router =express.router();45
679(req, res) )
13(req, res) )
17輸入指令碼:
點選click後的效果:
可以看到事先設定的cookie被打出來了,這就是reflected xss攻擊,可以理解成將輸入引數直接通過後台打到了頁面上並執行了這段**。
控制方式:
後台針對前台傳送的引數做處理
preg_replace( '
/', '', $_get[ '
name
' ] )
htmlspecialchars( $_get[ 'restored xss:name
' ] );
永續性的xss攻擊,常見情況就是提交表單元素時帶有script、img等標籤儲存到資料庫中,然後在瀏覽這些資訊的頁面載入得時候渲染這些dom執行指令碼,不過也不是所有的頁面都需要我們將標籤進行處理,如果當存入的這些帶有執行標籤的內容以文字形式在瀏覽器中進行渲染時,是不會執行的,只有一些特別情況,比如innerhtml或者react中的dangerouslysetinnerhtml,可以將字串當成dom進行載入,這樣的就必須處理,不然就會出現restored xss攻擊漏洞,react對dangerouslysetinnerhtml的警告就是這個道理。
解決方案
httponly禁用:xss攻擊的目的是獲取目標使用者資訊,通過設定httponly禁用掉cookie,能保證xss攻擊拿不到cookie資訊導致xss攻擊失效,但是並不是絕對的,畢竟登入資訊不只有cookie,還有token等其他資訊。
based-dom xss:
基於dom的xss攻擊方式完全由客戶端完成,不涉及伺服器端的配合,載入頁面執行指令碼的時候就可以發生based-dom xss攻擊。
栗子:
var value = document.getelementbyid('input').value;效果:eval(value);
所以在 js**裡面,盡可能避免使用eval這樣的函式。
總結:如何防止xss攻擊,針對反射性xss攻擊,做好對url以及引數的過濾,針對注入型以及dom型做好足夠的標籤轉義,理論上是可以達到完美的效果。
csrf攻擊
csrf俗稱跨站協議偽造(跨站請求攻擊)
過程模擬
user正常傳送請求給a,a響應成功之後user生成了cookie,此時此刻user並沒有登出a站點,訪問到了b站點,由於攜帶cookie是瀏覽器預設行為,當請求訪問到了b的時候,b發出請求訪問第三方站點(a),a在接到這個請求的時候並不知道請求的**,導致發生cfrs攻擊。
模擬攻擊場景
get請求:
在cfrs攻擊中get請求理論上是沒有任何威脅,惡意攻擊目的是修改資料(post請求)
我們準備了兩個server,a(正常伺服器),b(惡意伺服器)
a:首先我們在正常伺服器生成cookie
惡意伺服器b請求處理
在站點a中的cookie 還未失效的情況下我們訪問了站點b,站點b讓站點a傳送了請求
我們看下效果
這時站點a接收到了這個請求,我們可以看到目標伺服器端口8888,但是**是8889(惡意伺服器),到這裡已經達到了攻擊的效果,那麼如果我們在模擬更實際的意義的時候(改用post請求)
post請求:
這裡為了方便,我們直接在惡意站點b重新整理的時候直接攻擊站點a
場景1:當我們訪問正常a站點,但是帶有乙個惡意攻擊的鏈結(此場景在正常站中不會給提供,或者出現xss攻擊暴漏在a站點中的鏈結)點選這個鏈結進入惡意站點b
場景2:當我們直接訪問乙個惡意站點b
可以看到a服務接受到了post請求
檢視請求cookie
可以看到來自惡意b站點的請求直接訪問到了a站點,並且攜帶了a站點的cookie,這樣就達到了b拿到了a的身份並且訪問到了a站點,實施相關惡意操作。
防禦策略
1.驗證 http referer 字段
截圖上可有看到每個請求都帶有refer標記請求**,當後台對請求**做控制,設定白名單的時候,就可以達到了解決來自其他站點請求的訪問許可權,從而達到了解決cfrs攻擊的目的,但是這個方式是有侷限性的。
refer作用是標記http請求**,當user登入站點a的時候,站點a通過refer鎖定請求**看。接下來的請求比如是同一**(網域名稱,ip等等)此時此刻如果從b站點再去訪問a站點時候,refer發生改變,導致此請求無效。但是並不是一種完美的解決方案,瀏覽器舊的版本,也可以通過篡改refer來實現惡意攻擊,瀏覽器也同樣可以禁用refer,導致再次訪問a站點,由於a站點不信任請求從而發生請求失效。
2.使用token
修改a站點的登入資訊認證方式——token
訪問成功後生成了乙個token。
惡意站點b獲取token結果
可以明確說明,當乙個**使用了token的時候,就可以直接忽略了cfrs攻擊,因為根本獲取不到token,也就解決了獲取使用者資訊的渠道。
綜合:針對乙個站點做關於cfrs防禦的時候,我們通常使用的方式就是以上兩種,當然可以合併一起使用。
ps:token重點解決問題是單點選登入~
web安全(xss攻擊和csrf攻擊)
1 csrf攻擊 csrf cross site request forgery 跨站請求偽造。1 攻擊原理 如上圖,在b 引誘使用者訪問a 使用者之前登入過a 瀏覽器 cookie 快取了身份驗證資訊 通過呼叫a 的介面攻擊a 2 防禦措施 1 token驗證 登陸成功後伺服器下發token令牌存...
XSS攻擊與CSRF攻擊
xss cross sitescript 跨站指令碼攻擊,是web程式中常見的漏洞,xss屬於被動式且用於客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有xss漏洞的 中輸入 傳入 惡意的html 當其它使用者瀏覽該 時,這段html 會自動執行,從而達到攻擊的目的。如,盜取使用者coo...
web安全指XSS與CSRF
根據 http 一書關於web攻擊的介紹,攻擊的模式有兩大類,主動攻擊與被動攻擊 主動攻擊 主要針對伺服器上的資源進行攻擊,代表攻擊方式有sql注入與os命令注入.被動攻擊 攻擊者並不是直接對web應用發起攻擊,而是通過一定的引誘或者圈套策略發起攻擊.被動攻擊中最常見的兩種攻擊方式是xss與csrf...