一個XSS帶來的一些收穫和警示&常見安全問題總結

獨立博客地址:http://blog.0x1.im/archives/web/one-month-begin-with-a-xss.htmlphp

1、常見的攻擊方式及防護

1. XSS注入

XSS注入是最多見的、最容易的,但危害性缺不小。對於須要登陸的網站,拿到cookie就意味着能夠登入後臺。若是後臺是管理員用的,那意味着網站的大部分信息都暴漏了。若是是用戶的後臺,一次注入可能就意味着不少用戶的私人信息暴漏在了別人面前。html

XSS原理簡單、手法提及來也不復雜。只要有輸入框,沒有作過濾,就留給了有心人一個注入代碼的可能。經過注入代碼調用遠程的js文件,能夠輕鬆獲取到cookie等信息。前端

XSS的的基本防護是對用戶輸入的內容作好過濾,對於一些特殊字符的進行必要的處理。特別是須要寫入到數據庫裏的數據。web

2. CSRF攻擊

別人誘導你點了一個連接、向後端發了一個請求,這個請求下轉走了你支付寶裏的錢,這就是CSRF。我登陸了A站,A站有扣款的服務。我又登錄了B站,B站有個按鈕其實是A站的扣款連接,我並不知情,基本上就是這樣的。sql

防護CSRF的關鍵在於後端要判斷出請求是否是來自於本身呈現給用戶的網頁。在客戶端的輸入框隱藏一個輸入框,框裏留一個隨機數,後端校驗這個隨機數,就能有效防護絕大部分的CSRF攻擊。由於其它的網頁和你的網頁同時在瀏覽器存在的時候,從他的網頁裏請求你的鏈接時,雖然能帶上cookie等信息,可是他的網頁卻沒辦法從你的網頁裏獲取到這個隨機數。thinkphp

3. SQL注入

SQL注入與XSS相似,也是從輸入入手。但不一樣於XSS,SQL注入的內容可能並非在輸入框裏進行的。一個請求須要根據用戶請求的內容查詢數據庫,就意味着可能會有SQL注入的風險。經過與預期不一樣的字符串進行查詢,構造SQL語句來獲取數據庫的信息,哪怕是有一個SQL注入的漏洞不當心暴漏給了有心的人,可能整個數據庫就要淪陷了。shell

SQL注入的防護工做也是要對從前端獲取到的查詢信息進行嚴格的過濾。對於不在預期以內的字符串進行完善的處理。數據庫

4. 被上傳webshell

所謂webshell,就是能經過瀏覽器直接在服務器上操做命令,甚至讀取到結果。webshell是由上傳而已。好比PHP能夠經過system命令或者exec命令執行系統命令。若是有心的人上傳一個腳本到你的服務器,腳本中帶上了一句:echo system($_GET['cmd']);,很不幸,他能執行任何web服務器和PHP解釋器有權限執行的命令。後端

預防webshell須要對上傳文件作嚴格的限制,嚴格控制上傳文件的格式,檢查上傳的內容。若是是有特殊必要,也要對上傳文件的訪問作好嚴格的限制。瀏覽器

同時也要關注服務器、web服務器和腳本解釋器的動態,好比Bash的破殼漏洞、IIS6的解析漏洞,及時防護才能規避風險。

2、開發和管理系統過程當中的注意事項

許多事情須要在平時開發和維護的過程當中注意,處理好一些上的問題,每每能有效的規避大部分的風險。

1. 特殊文件和特殊路徑的問題

不要讓不應顯示的信息顯示出去,不要讓不應讓人訪問的東西讓別人看到。

剛搭好環境,有時候習慣隨手寫個phpinfo.php放那裏檢查一下,過後忘記了處理,別人正好看到了,猜解路徑、或者剛好又拿到了別的把柄,一整個網站基本上也就去了。

一些框架特定的版本爆出來大的漏洞,而你剛好留了version或license文件在網站跟目錄,替別人省了不少事情。好比thinkphp曾經有過任意代碼執行漏洞。

直接經過svn更新代碼,svn早期有些版本會在全部目錄下都有.svn目錄,有特定的文件命名文件裏直接就是代碼,而你的web服務器剛好沒有解析,整個網站的代碼就到了別人手裏。即便在新的版本里,根目錄下也有個wc.db的文件,而你剛好又沒有不容許.svn目錄的訪問。

管理後臺就是一個簡單的網站的路徑,好比phpmyadmin就是/phpmyadmin,phpmyadmin有幾個版本有萬能用戶名的漏洞,輕輕鬆鬆拿到數據庫。

項目開發過程當中,隨手把數據庫導出一個sql文件保存在web根目錄下面,放到服務器上的時候也沒有刪除,有人隨手去試一試,就把它下載下來了。這是很危險的。

2. 不要使用弱口令

任什麼時候候、任何地方都不要使用弱口令。

像上面所說,即便你的phpmyadmin的版本剛好規避了以上的漏洞,而你安裝的時候隨手敲了個123456當密碼。那基本上等於沒有設防。

還有網站後臺的admin若是,使用一些簡單的網站名稱、域名或者常見的數字字母組合當密碼,很容易猜解出來。

服務器端的腳本訪問數據庫也不要用root帳戶徹底權限的帳號密碼,若是網站被上傳webshell,拿到配置文件,而數據庫又剛好是超級權限的帳戶,不近代碼暴漏在別人面前,網站也被拖庫了。

3. 服務端安全策略與權限分配

若是服務器淪陷了,那基本上任何信息都暴漏在了他人面前,因此作好服務器端的管理尤其重要。登陸限制、防暴力猜解、防sqlmap、防端口掃描、監控異常流量和IP可以抵禦部分極大的隱患。好比破殼漏洞出現時,有些惡意注入會執行一個ping,若是ping回對方的服務器,你的服務器很快就淪陷到他手裏了。若是你剛好禁止了icmp包的output,就能度過一段緩衝期。

在Linux上,每一個應用程序都有一個執行的用戶,web服務器和腳本解釋器的用戶權限作好限制、web文件目錄作好分配可限制也能防止一些異常命令的執行。

4. 常常檢查服務器、數據庫等log信息

有時候事情已經發生了,能及時發現及時處理也能把損失降到最低。可怕的時候服務器已經淪陷在別人手裏了,你還不知道。

不少時候漏洞和隱患也不是單獨存在的,找到一個突破口,每每就能攻陷其它地方。好比在數據庫裏寫入一個webshell語句,而後經過構造查詢拿到服務器上的東西。

5. 常常關注安全信息

一個安全問題爆出來以後,不要想固然的認爲我這裏應該沒事,及時檢查一下才能有效預防。常常瀏覽一下烏雲和freebuf也能及時獲取到相關的資訊。

安全問題是個長期的工做,沒有鐵打的系統,不是一蹴而就的事情,時時留心最重要。

相關文章
相關標籤/搜索