1. 程式人生 > 實用技巧 >白話web安全

白話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'>

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


防盜鏈


這篇就到這啦~


拜了個拜~