白話web安全

傷心往事

夢回大二,那時候沉迷於毒奶粉,甚至國慶都在宿舍與毒奶粉共同度過,但是卻發生了一件讓我迄今難忘的事情~

我新練的黑暗武士被盜了!!!乾乾淨淨!!!

雖然過了好久了,但是記憶猶新啊,彷彿發生在昨天。記得那時候還在屯材料,金色小晶體是什麼的。沒日沒夜的刷圖攢錢,倒買倒賣假粉,真紫。後來刷悲鳴的時候爆了一把蟲炮(一把價格蠻高的手炮武器),把我激動的喲。

然後就掛到拍賣行了,不一會居然有人私信我,說他看中了,但是游戲裏的金幣不夠,看他挺誠心的,就和他商量怎麼辦~

最終方案就是他讓我登錄一個網站,然後輸入我的qq號、密碼。他會在那個網站上給我轉錢。而且價格要比拍賣行高,我一想,不虧!就去了,但是當我輸入賬號密碼後,我的遊戲被中斷了。等我馬不停蹄的登錄賬號後,我的材料,武器,金幣都沒了~~

雖然說這個事和網絡安全關係不是很大,完全是因為自己啥都不懂,那個網站應該不是騰訊官方的。相當於我把我的賬號密碼主動泄漏給他人了~

不過如果你想保護好的你的賬號和隱私,對於網絡安全還是有必要進行了解的。

csrf攻擊

煮個例子:

  1. 我登陸了騰訊官方網站(qq.com),這時候我的身份信息就被保留在cookies中了
  2. 那個壞人騙我訪問另外一個非騰訊官網網站(xx.com)
  3. xx.com有一段腳本會發往請求到qq.com,比如qq.com/some-action,這時候會攜帶之前被瀏覽器保存身份信息
  4. qq.com收到了帶有身份信息的請求,會正常處理
  5. 這時候的行為就不是我能控制的了,如果那個壞人利用我的身份信息向qq.com發送一個轉義物品的請求,那我也沒辦法的。

上面的例子只是其中之一,還有各種各樣的攻擊方式,這裡簡單列舉下:

  1. 訪問一個不安全地址,頁面包含自動發送的get請求或post請求。
  2. 鏈接形式,比如圖片,上面可能是各種誘導語。

那我們怎麼避免csrf呢?

這就需要我們對症下藥,那有哪些明顯的癥狀呢?

  1. csrf發生在第三方網站
  2. csrf攻擊獲取不到cookie信息,只是使用

那我們就可以開發出有療效的葯來治它。

  1. 阻止不被允許的第三方域發起請求 同源檢測 + samesite cookie

  2. 類似於簽名,要求附帶源域產出的一些私密信息 csrf token + 雙重cookie驗證

  3. 人工驗證

  • 同源檢測就是說檢測來源是否合法,否則禁止請求。不過這種方法相對簡單,只能防範常規的csrf攻擊。
  • samesite cookie的話目前兼容性不是很好,還未普及,samesite cookie本身是用來限制在不同域下的請求時,cookie是否可被攜帶
  • csrf token是生成一個隨機的token,注入到各種各樣的鏈接地址或form表單中,利用的是csrf可獲取瀏覽器設置的cookie,但是無法獲取html上的隨機數。token是一個很有效的方法,除了有點麻煩。
  • 雙重cookie驗證,除了服務端設置的cookie外,每次訪問頁面還將自動設置一個隨機的cookie,然後再請求的時候攜帶,之後服務端進行url上的cookie和瀏覽器上的cookie驗證。該方法不僅減輕服務端壓力,而且後端驗證也方便,但是安全性沒有token高。
  • 人工驗證。比如驗證碼、輸入支付密碼,這樣即使你有cookie也無法攻擊,因為還需要進一步信息驗證。可以發現,很多網站都會有這一步人工驗證的過程。

更多詳見: 美團web安全-csrf

host、referrer、origin

xss攻擊

什麼是xss

xss是是一種代碼注入攻擊,或者說是一種插入式腳本攻擊,攻擊者利用對瀏覽器、服務器、數據庫的理解,在網站中插入各種可以和網站相關運行代碼組合併可執行的腳本,之後在運行的時候不僅會執行網站本身的代碼,還會執行攻擊者插入的腳本。

比如獲取url上的query進行搜索的搜索框,原來是這樣的:

<input type="text" :value="searchWord">  

如果攻擊者注入這樣的代碼:

"><script>alert('你被攻擊了')</script>  

拼接後就會變成這樣:

<input type="text" :value=""><script>alert('你被攻擊了')</script>">  

當瀏覽器執行的時候,就會彈框。

對於服務端或者數據庫同樣可以利用類似原理進行攻擊。

這樣攻擊者就可以獲取cookie、修改數據庫等惡意操作了,非常危險。

常見xss攻擊

  • 存儲式

先存儲到服務端,比如數據庫,然後吐給瀏覽器,瀏覽器執行的時候觸發

  • 反射性

用戶點擊的時候觸發,比如攻擊者構造出特殊的url地址,服務端解析後返回的時候就已經有惡意代碼了。

  • DOM型

同上,不過是直接就到瀏覽器了,執行後產生攻擊。

相對於前兩種,DOM型是瀏覽器觸發的,其他兩個是服務端觸發的。

瀏覽器和服務端進行適當的代碼轉義即可防範大部分xss攻擊,除此之外,還可以禁止一些不安全的操作,比如加載外域代碼,控制內容輸入長度,http-only(禁止js操作cookie),驗證碼等. 還有csp – 內容安全策略

感覺對比上面的csrf攻擊,主要區別是:xss是利用用戶對網站的信任,csrf是利用網站對用戶操作的信任。

更多詳見: 美團web安全-xss

sql注入

其實和xss攻擊中提及的數據庫部分是一樣的。

比如有這樣一段sql語句:

sql = "select * from users where name=" + name;  

name是由用戶輸入之後生成的,這時候如果直接將name結果拼接:

select * from users where name='' or '1'='1';  

這樣不僅執行了原本的sql,還執行了攻擊者的代碼。

解決方法同上。

DDoS攻擊

說白了就是過載,玩過爐石應該能具象出一副過載的畫面吧~

你當前回合過載了,那你下回合就得休息休息。類比服務端也是一樣的。如果處理的事務過多,後面的只能耐心等待(休息)。

我們可以限制ip的流量,有錢的話多整點服務也行,嘿嘿~

總結

內容不多,但是盡量有用。

web安全是網站應用誕生的產物,一個攻一個守,本文介紹的只是冰山一角,希望能幫到有需要的人。

最近發現博客園上的圖片不會自動轉成自己的圖床cdn地址,依然使用的外站,導致圖片資源403,也是讓我挺頭疼了,雖然加了meta:

<meta name="referrer" content="never">  

但是在部分手機瀏覽器上還是有問題,再貼一個防盜鏈文章地址吧。留給自己看~

防盜鏈

這篇就到這啦~

拜了個拜~