XSS 和 CSRF 攻擊
網站安全的基礎有三塊:
(1) 防範中間人攻擊 (TLS mim, man in the middle)
當主機A、和機B通信時,都由主機C來為其“轉發”,而A、B之間並沒有真正意思上的直接通信,他們之間的信息傳遞同C作為中介來完成,但是A、B卻不會意識到,而以為它們之間是在直接通信。這樣攻擊主機在中間成為了一個轉發器,C可以不僅竊聽A、B的通信還可以對信息進行篡改再傳給對方,C便可以將惡意信息傳遞給A、B以達到自己的目的。
防範的方法是: 必須對認證過程的傳輸者認證過程的本身真實性進行認證。例如使用非對稱加密的比較權威的TLS證書搭建HTTPS網站。
(2) 跨站腳本攻擊。防範XSS跨站腳本(Cross-site scripting。攻擊者盜用用戶身份來做事。[盜用身份之後可以做很多事]
XSS其實就是Html的註入問題,攻擊者的輸入沒有經過嚴格的控制進入了數據庫,最終顯示給來訪的用戶,導致可以在來訪用戶的瀏覽器裏以瀏覽用戶的身份執行Html代碼。
數據流程為:攻擊者的Html輸入—>web程序—>進入數據庫—>web程序—>用戶瀏覽器。
跨站腳本,顧名思義,更多的情況下是註入一些js代碼,實現站點影響或竊取用戶信息等目的。
a. 盜用 cookie ,獲取敏感信息。
b.利用植入 Flash ,通過 crossdomain 權限設置進一步獲取更高權限;或者利用Java等得到類似的操作。
c.利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執行一些管理動作,或執行一些一般的如發微博、加好友、發私信等操作。
d.利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當的投票活動。
e.在訪問量極大的一些頁面上的XSS可以攻擊一些小型網站,實現DDoS攻擊的效果。
防範的方法:
1.永遠不相信用戶的輸入。需要對用戶的輸入進行處理,只允許輸入合法的值,其它值一概過濾掉。
(某些情況下,我們不能對用戶數據進行嚴格的過濾,那我們也需要對標簽進行轉換。)
2.HttpOnly防止劫取Cookie
HttpOnly最早由微軟提出,至今已經成為一個標準。瀏覽器將禁止頁面的Javascript訪問帶有HttpOnly屬性的Cookie。
目前主流瀏覽器都支持,HttpOnly解決是XSS後的Cookie支持攻擊。
(3) 跨站請求偽造。防範CSRF。 攻擊者利用用戶的手來做事。[借用戶的手來做事,做的事有局限性]
CSRF 顧名思義,是偽造請求,冒充用戶在站內的正常操作。我們知道,絕大多數網站是通過 cookie 等方式辨識用戶身份(包括使用服務器端 Session 的網站,因為 Session ID 也是大多保存在 cookie 裏面的),再予以授權的。所以要偽造用戶的正常操作,最好的方法是通過 XSS 或鏈接欺騙等途徑,讓用戶在本機(即擁有身份 cookie 的瀏覽器端)發起用戶所不知道的請求。
CSRF攻擊依賴下面的假定:
攻擊者了解受害者所在的站點(知道要攻擊的地址)
攻擊者的目標站點具有持久化授權cookie或者受害者具有當前會話cookie
目標站點沒有對用戶在網站行為的第二授權
CSRF攻擊的主要目的是讓用戶在不知情的情況下攻擊自己已登錄的一個系統,類似於釣魚。如用戶當前已經登錄了郵箱,或bbs,同時用戶又在使用另外一個,已經被你控制的站點,我們姑且叫它釣魚網站。這個網站上面可能因為某個圖片吸引你,你去點擊一下,此時可能就會觸發一個js的點擊事件,構造一個bbs發帖的請求,去往你的bbs發帖,由於當前你的瀏覽器狀態已經是登陸狀態,所以session登陸cookie信息都會跟正常的請求一樣,純天然的利用當前的登陸狀態,讓用戶在不知情的情況下,幫你發帖或幹其他事情。
CSRF成功的前提用戶必須登錄到目標站點,且用戶瀏覽了攻擊者控制的站點。
與XSS最為不同一點是CSRF可以不用JS就能達到目的(GET和POST的區別)。
而且攻擊者僅僅只需要給目標站一個請求就能成功。如0X01所說請求可以繞過同源策略。
還有一個天然條件是瀏覽器的安全缺陷:
瀏覽器在最初加入Cookie功能時並沒有考慮安全因素。假設一個網站使用了Cookie,當一個用戶完成身份驗證之後.瀏覽器得到一個標識用戶身份的Cookie,只要不退出或關閉瀏覽器。以後訪問相同網站下的頁面的時候,對每一個請求瀏覽器都會“智能”地主動附帶上該網站的Cookie來標識自己,用戶不需要重新認證就可以被網站識別。當第三方WEB頁面產生了指向當前網站域下的請求時,該請求也會帶上當前網站的Cookie。這種認證方式,稱之為隱式認證。
除了Cookie認證方式之外,其他Web認證機制也面臨同樣的問題。比如HTTP基本認證,用戶通過認證後。瀏覽器仍會“智能”地把用戶名和口令附加到之後第三方發給站點的請求中。即使網站使用了安全套接字(SSL)來加密連接.瀏覽器也會”智能“地自動把SSL認證信息加到第三方發給站點的請求中。
防範:頁面表單加入Html.AntiForgeryToken(),
對應的提交的Action添加
[HttpPost] [ValidateAntiForgeryToken]
XSS 和 CSRF 攻擊