web安全常見攻擊解讀--DDos、cc、sql注入、xss、CSRFhtml
一,DDos前端
https://www.cnblogs.com/sochishun/p/7081739.html#4111858node
http://nic.swu.edu.cn/s/nic/thyt/20180604/2555404.htmllinux
1.1 DDos介紹web
DDoS是英文Distributed Denial of Service的縮寫,意即「分佈式拒絕服務」。分佈式拒絕服務攻擊發起後,攻擊網絡包就會從不少DOS攻擊源(俗稱肉雞)猶如洪水般涌向受害主機,從而把合法用戶的網絡包淹沒,致使合法用戶沒法正常訪問服務器的網絡資源,所以拒絕服務攻擊又被稱之爲「洪水攻擊」,常見的DDOS攻擊手段有SYN Flood、UDP Flood、ICMP Flood、HTTP Flood、NTP Flood、Connections Flood、Script Flood、DNS Query Flood等。sql
什麼是DDoS攻擊?
讓咱們來舉個例子,假設你開了一家店,生意還不錯。
此時隔壁家生意蕭條的店主盯上了你。
因而他僱傭來了一羣鬧事者上門,裝成要買東西的顧客。
你徹底目不暇接,並且他們老找你問這問那,東看西看,就是不買東西,還賴着不走!
而真正的顧客連進店的地方都沒有了!這就是所謂的DDoS攻擊——
一羣「惡意訪問」、「堵店門」、「佔空間」、還「調戲店員」的非法流量。數據庫
1.2 DDos經常使用攻擊方式express
1. SYN Flood:
利用TCP協議的原理,這種攻擊方法是經典最有效的DDOS方法,可通殺各類系統的網絡服務,主要是經過向受害主機發送大量僞造源IP和源端口的SYN或ACK 包,致使主機的緩存資源被耗盡或忙於發送迴應包而形成拒絕服務。
TCP通道在創建之前,須要三次握手:
a. 客戶端發送一個包含SYN標誌的TCP報文, 同步報文指明客戶端所須要的端口號和TCP鏈接的初始序列號
b. 服務器收到SYN報文以後,返回一個SYN+ ACK報文,表示客戶端請求被接受,TCP初始序列號加1
c.客戶端也返回一個確認報文ACK給服務器,一樣TCP序列號加1
d. 若是服務器端沒有收到客戶端的確認報文ACK,則處於等待狀態,將該客戶IP加入等待隊列,而後輪訓發送SYN+ACK報文
因此攻擊者能夠經過僞造大量的TCP握手請求,耗盡服務器端的資源。瀏覽器
2. HTTP Flood:俗稱cc攻擊
針對系統的每一個Web頁面,或者資源,或者Rest API,用大量肉雞,發送大量http request。這種攻擊主要是針對存在ASP、JSP、PHP、CGI等腳本程序,並調用MSSQLServer、MySQLServer、Oracle等數據庫的網站系統而設計的,特徵是和服務器創建正常的TCP鏈接,並不斷的向腳本程序提交查詢、列表等大量耗費數據庫資源的調用,典型的以小博大的攻擊方法。缺點是對付只有靜態頁面的網站效果會大打折扣。緩存
3. 慢速攻擊:
Http協議中規定,HttpRequest以\r\n\r\n結尾來表示客戶端發送結束。攻擊者打開一個Http 1.1的鏈接,將Connection設置爲Keep-Alive, 保持和服務器的TCP長鏈接。而後始終不發送\r\n\r\n, 每隔幾分鐘寫入一些無心義的數據流, 拖死機器。
4. P2P攻擊:
每當網絡上出現一個熱門事件,好比XX門, 精心製做一個種子, 裏面包含正確的文件下載, 同時也包括攻擊目標服務器的IP。這樣,當不少人下載的時候, 會無心中發起對目標服務器的TCP鏈接。
5. NTP Flood:
NTP是標準的基於UDP協議傳輸的網絡時間同步協議,因爲UDP協議的無鏈接性,方便僞造源地址。攻擊者使用特殊的數據包,也就是IP地址指向做爲反射器的服務器,源IP地址被僞形成攻擊目標的IP,反射器接收到數據包時就被騙了,會將響應數據發送給被攻擊目標,耗盡目標網絡的帶寬資源。通常的NTP服務器都有很大的帶寬,攻擊者可能只須要1Mbps的上傳帶寬欺騙NTP服務器,就可給目標服務器帶來幾百上千Mbps的攻擊流量。所以,「問-答」方式的協議均可以被反射型攻擊利用,將質詢數據包的地址僞造爲攻擊目標地址,應答的數據包就會都被髮送至目標,一旦協議具備遞歸效果,流量就被顯著放大了,堪稱一種「借刀殺人」的流量型攻擊。
1.3 DDos攻擊類型判斷
DDOS攻擊現象斷定方法
1.SYN類攻擊判斷:
A.CPU佔用很高;
B.網絡鏈接狀態:netstat –na,若觀察到大量的SYN_RECEIVED的鏈接狀態;
C.網線插上後,服務器當即凝固沒法操做,拔出後有時能夠恢復,有時候須要從新啓動機器纔可恢復。
2.CC類攻擊判斷:
A.網站出現service unavailable提示;
B.CPU佔用率很高;
C.網絡鏈接狀態:netstat –na,若觀察到大量的ESTABLISHED的鏈接狀態 單個IP高達幾十條甚至上百條;
D.用戶沒法訪問網站頁面或打開過程很是緩慢,軟重啓後短時間內恢復正常,幾分鐘後又沒法訪問。
3.UDP類攻擊判斷:
A.觀察網卡情況 每秒接受大量的數據包;
B.網絡狀態:netstat –na TCP信息正常。
4.TCP洪水攻擊判斷:
A.CPU佔用很高;
B.netstat –na,若觀察到大量的ESTABLISHED的鏈接狀態 單個IP高達幾十條甚至上百條
1.4 DDoS攻擊防護方法:
1. 過濾沒必要要的服務和端口:
可使用Inexpress、Express、Forwarding等工具來過濾沒必要要的服務和端口,即在路由器上過濾假IP。好比Cisco公司的CEF(Cisco Express Forwarding)能夠針對封包Source IP和Routing Table作比較,並加以過濾。只開放服務端口成爲目前不少服務器的流行作法,例如WWW服務器那麼只開放80而將其餘全部端口關閉或在防火牆上作阻止策略。
2. 異常流量的清洗:
經過DDOS硬件防火牆對異常流量的清洗過濾,經過數據包的規則過濾、數據流指紋檢測過濾、及數據包內容定製過濾等頂尖技術能準確判斷外來訪問流量是否正常,進一步將異常流量禁止過濾。單臺負載每秒可防護800-927萬個syn攻擊包。
3. 分佈式集羣防護:
這是目前網絡安全界防護大規模DDOS攻擊的最有效辦法。分佈式集羣防護的特色是在每一個節點服務器配置多個IP地址(負載均衡),而且每一個節點能承受不低於10G的DDOS攻擊,如一個節點受攻擊沒法提供服務,系統將會根據優先級設置自動切換另外一個節點,並將攻擊者的數據包所有返回發送點,使攻擊源成爲癱瘓狀態。
4. 高防智能DNS解析:
高智能DNS解析系統與DDOS防護系統的完美結合,爲企業提供對抗新興安全威脅的超級檢測功能。智能根據用戶的上網路線將DNS解析請求解析到用戶所屬網絡的服務器。
5. 接入雲高防及使用CDN加速
二,CC攻擊
2.1 CC攻擊介紹
CC攻擊(Challenge Collapsar)是DDOS(分佈式拒絕服務)的一種,前身名爲Fatboy攻擊,也是一種常見的網站攻擊方法。攻擊者經過代理服務器或者肉雞向向受害主機不停地發大量數據包,形成對方服務器資源耗盡,一直到宕機崩潰。相比其它的DDOS攻擊CC彷佛更有技術含量一些。這種攻擊你見不到真實源IP,見不到特別大的異常流量,但形成服務器沒法進行正常鏈接。最讓站長們憂慮的是這種攻擊技術含量低,利用更換IP代理工具和一些IP代理一個初、中級的電腦水平的用戶就可以實施攻擊。
2.2 CC攻擊防護方法
1. 利用Session作訪問計數器:
利用Session針對每一個IP作頁面訪問計數器或文件下載計數器,防止用戶對某個頁面頻繁刷新致使數據庫頻繁讀取或頻繁下載某個文件而產生大額流量。文件下載不要直接使用下載地址,才能在服務端代碼中作CC攻擊的過濾處理
2. 把網站作成靜態頁面:
大量事實證實,把網站儘量作成靜態頁面,不只能大大提升抗攻擊能力,並且還給駭客入侵帶來很多麻煩,至少到如今爲止關於HTML的溢出還沒出現,門戶網站主要都是靜態頁面若你非須要動態腳本調用,那就把它弄到另一臺單獨主機去,免的遭受攻擊時連累主服務器。
3. 加強操做系統的TCP/IP棧
linux系統級別安全防護,開啓後可能用影響服務器負載性能,具備兩面性。
4. 在存在多站的服務器上,嚴格限制每個站容許的IP鏈接數和CPU使用時間,這是一個頗有效的方法。
CC的防護要從代碼作起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,設置訪問數據庫請求都必須一個隨機參數在Session裏面,全是靜態頁面,攻擊就會沒有效果。代碼層的防護須要從點點滴滴作起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個服務器的影響!
5. 服務器前端加CDN中轉
(免費的有百度雲加速、360網站衛士、青牛雲,又拍雲等),若是資金充裕的話,能夠購買高防的盾機,用於隱藏服務器真實IP,域名解析使用CDN的IP,全部解析的子域名都使用CDN的IP地址。此外,服務器上部署的其餘域名也不能使用真實IP解析,所有都使用CDN來解析。 另外,防止服務器對外傳送信息泄漏IP地址,最多見的狀況是,服務器不要使用發送郵件功能,由於郵件頭會泄漏服務器的IP地址。若是非要發送郵件,能夠經過第三方代理(例如sendcloud)發送,這樣對外顯示的IP是代理的IP地址。總之,只要服務器的真實IP不泄露,10G如下小流量DDOS的預防花不了多少錢,免費的CDN就能夠應付得了。若是攻擊流量超過20G,那麼免費的CDN可能就頂不住了,須要購買一個高防的盾機來應付了,而服務器的真實IP一樣須要隱藏。
三,sql注入
https://baijiahao.baidu.com/s?id=1629045600845343519&wfr=spider&for=pc
https://www.cnblogs.com/binyao/p/4900393.html
3.1 sql注入介紹
什麼是SQL注入式攻擊
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或做爲存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊它經過將任意SQL代碼插入數據庫查詢,使攻擊者可以徹底控制Web應用程序後面的數據庫服務器。攻擊者可使用SQL注入漏洞繞過應用程序安全措施;能夠繞過網頁或Web應用程序的身份驗證和受權,並檢索整個SQL數據庫的內容;還可使用SQL注入來添加,修改和刪除數據庫中的記錄。
3.2 sql注入攻擊類型
1 帶內注入:
這是典型的攻擊,攻擊者能夠經過相同的通訊通道發起攻擊並得到結果。這是經過兩種帶內技術完成的:
● 基於錯誤的SQL注入:從顯示的錯誤消息中獲取有關數據庫的信息
● 基於聯合的SQL注入:依賴於攻擊者可以將UNION ALL被盜信息的結果與合法結果鏈接起來。
這兩種技術都依賴於攻擊者修改應用程序發送的SQL,以及瀏覽器中顯示的錯誤和返回的信息。
若是應用程序開發人員或數據庫開發人員沒法正確地參數化他們在查詢中使用的值,那麼它會成功。二者都是試錯法,能夠檢測到錯誤。
2 盲注入:
也稱爲推理SQL注入,盲注入攻擊不會直接從目標數據庫中顯示數據;相反,攻擊者會仔細檢查行爲中的間接線索。HTTP響應中的詳細信息,某些用戶輸入的空白網頁以及數據庫響應某些用戶輸入須要多長時間,這些均可以是線索,具體取決於攻擊者的目標。
3 帶外注入:
這種攻擊有點複雜,當攻擊者沒法在單個直接查詢 - 響應攻擊中實現其目標時,攻擊者可能會使用此攻擊。一般,攻擊者會製做SQL語句,這些語句在呈現給數據庫時會觸發數據庫系統建立與攻擊者控制的外部服務器的鏈接。以這種方式,攻擊者能夠收集數據或可能控制數據庫的行爲。二階注入就是一種帶外注入攻擊。在這種狀況下,攻擊者將提供SQL注入,該注入將由數據庫系統的單獨行爲存儲和執行。當二級系統行爲發生時(它可能相似於基於時間的做業或由其餘典型管理員或用戶使用數據庫觸發的某些事情)而且執行攻擊者的SQL注入,那就是當「伸出」到系統時攻擊者控制發生了。
3.3 防護sql注入
1,不使用動態sql
2,將用戶登陸名稱、密碼等敏感數據加密保存
3,嚴格限制數據庫用戶權限
4,避免直接向用戶顯示數據庫錯誤
5,檢查用戶輸入的合法性
四 xss跨站攻擊
https://www.cnblogs.com/firstdream/p/7760490.html
4.1 xss介紹
跨站腳本攻擊(Cross-site scripting,一般簡稱爲XSS)發生在客戶端,可被用於進行竊取隱私、釣魚欺騙、偷取密碼、傳播惡意代碼等攻擊行爲。惡意的攻擊者將對客戶端有危害的代碼放到服務器上做爲一個網頁內容, 使得其餘網站用戶在觀看此網頁時,這些代碼注入到了用戶的瀏覽器中執行,使用戶受到攻擊。通常而言,利用跨站腳本攻擊,攻擊者可竊會話COOKIE從而竊取網站用戶的隱私,包括密碼。XSS攻擊使用到的技術主要爲HTML和Javascript,也包括VBScript和ActionScript等。XSS攻擊對WEB服務器雖無直接危害,可是它藉助網站進行傳播,使網站用戶受到攻擊,致使用戶賬號被竊取,從而對網站也產生了較嚴重的危害。
4.2 xss漏洞修復
一:避免XSS的方法之一主要是將用戶所提供的內容輸入輸出進行過濾 ,能夠利用下面這些函數對出現xss漏洞的參數進行過濾
1.PHP的htmlentities()或是htmlspecialchars()
2.Python的cgi.escape()
3.ASP的Server.HTMLEncode()
4.ASP.NET的Server.HtmlEncode()或功能更強的Microsoft Anti-Cross Site Scripting Library
5.Java的xssprotect(Open Source Library)
6.Node.js的node-validator
二:使用開源的漏洞修復插件。
五 CSRF跨站請求僞造
https://www.jianshu.com/p/67408d73c66d
5.1 CSRF介紹
CSRF攻擊的全稱是跨站請求僞造( cross site request forgery),是一種對網站的惡意利用,儘管聽起來跟XSS跨站腳本攻擊有點類似,但事實上CSRF與XSS差異很大,XSS利用的是站點內的信任用戶,而CSRF則是經過假裝來自受信任用戶的請求來利用受信任的網站。你能夠這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義向第三方網站發送惡意請求。 CRSF能作的事情包括利用你的身份發郵件、發短信、進行交易轉帳等,甚至盜取你的帳號
5.2 CSRF攻擊原理過程
1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登陸網站A;
2. 在用戶信息經過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登陸網站A成功,能夠正常發送請求到網站A;
3. 用戶未退出網站A以前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
4. 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;
5. 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的狀況下攜帶Cookie信息,向網站A發出請求。
網站A並不知道該請求實際上是由B發起的,因此會根據用戶C的Cookie信息以C的權限處理該請求,致使來自網站B的惡意代碼被執行。
5.3 CSRF防護
一、儘可能使用POST,限制GET
GET接口太容易被拿來作CSRF攻擊,接口最好限制爲POST使用,GET則無效,下降攻擊風險。固然POST並非萬無一失,攻擊者只要構造一個form就能夠,但須要在第三方頁面作,這樣就增長暴露的可能性。
二、將cookie設置爲HttpOnly
CRSF攻擊很大程度上是利用了瀏覽器的cookie,爲了防止站內的XSS漏洞盜取cookie,須要在cookie中設置「HttpOnly」屬性,這樣經過程序(如JavaScript腳本、Applet等)就沒法讀取到cookie信息,避免了攻擊者僞造cookie的狀況出現。在Java的Servlet的API中設置cookie爲HttpOnly的代碼如:response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly")
三、增長token
CSRF攻擊之因此可以成功,是由於攻擊者能夠僞造用戶的請求,該請求中全部的用戶驗證信息都存在於cookie中,所以攻擊者能夠在不知道用戶驗證信息的狀況下直接利用用戶的cookie來經過安全驗證。由此可知,抵禦CSRF攻擊的關鍵在於:在請求中放入攻擊者所不能僞造的信息,而且該信息不存在於cookie之中系統開發人員能夠在HTTP請求中以參數的形式加入一個隨機產生的token,並在服務端進行token校驗,若是請求中沒有token或者token內容不正確,則認爲是CSRF攻擊而拒絕該請求。
四、驗證 HTTP Referer 字段
根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。在一般狀況下,訪問一個安全受限頁面的請求來自於同一個網站