久久www免费人成看片老司机_母亲4在线观看完整版 百度_波多野结衣久久_亚洲午夜成人片_天美传媒国产精品果冻

 
您現(xiàn)在的位置:首頁(yè) ? 知識(shí)庫(kù) ? 軟件開發(fā) 軟件開發(fā)
常見(jiàn)web攻擊總結(jié)
發(fā)布日期:2018-04-11

XSS

什么是XSS

XSS攻擊:跨站腳本攻擊(Cross-Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。XSS是一種常見(jiàn)的web安全漏洞,它允許攻擊者將惡意代碼植入到提供給其它用戶使用的頁(yè)面中。不同于大多數(shù)攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與Web應(yīng)用。XSS的攻擊目標(biāo)是為了盜取存儲(chǔ)在客戶端的cookie或者其他網(wǎng)站用于識(shí)別客戶端身份的敏感信息。一旦獲取到合法用戶的信息后,攻擊者甚至可以假冒合法用戶與網(wǎng)站進(jìn)行交互。

XSS通??梢苑譃閮纱箢悾?/p>

  1. 存儲(chǔ)型XSS,主要出現(xiàn)在讓用戶輸入數(shù)據(jù),供其他瀏覽此頁(yè)的用戶進(jìn)行查看的地方,包括留言、評(píng)論、博客日志和各類表單等。應(yīng)用程序從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),在頁(yè)面中顯示出來(lái),攻擊者在相關(guān)頁(yè)面輸入惡意的腳本數(shù)據(jù)后,用戶瀏覽此類頁(yè)面時(shí)就可能受到攻擊。這個(gè)流程簡(jiǎn)單可以描述為:惡意用戶的Html輸入Web程序->進(jìn)入數(shù)據(jù)庫(kù)->Web程序->用戶瀏覽器。

  2. 反射型XSS,主要做法是將腳本代碼加入U(xiǎn)RL地址的請(qǐng)求參數(shù)里,請(qǐng)求參數(shù)進(jìn)入程序后在頁(yè)面直接輸出,用戶點(diǎn)擊類似的惡意鏈接就可能受到攻擊。

比如說(shuō)我寫了一個(gè)網(wǎng)站,然后攻擊者在上面發(fā)布了一個(gè)文章,內(nèi)容是這樣的<script>alert(document.cookie)</script>,如果我沒(méi)有對(duì)他的內(nèi)容進(jìn)行處理,直接存儲(chǔ)到數(shù)據(jù)庫(kù),那么下一次當(dāng)其他用戶訪問(wèn)他的這篇文章的時(shí)候,服務(wù)器從數(shù)據(jù)庫(kù)讀取后然后響應(yīng)給客戶端,瀏覽器執(zhí)行了這段腳本,就會(huì)將cookie展現(xiàn)出來(lái),這就是典型的存儲(chǔ)型XSS。

如圖:

如何預(yù)防XSS

答案很簡(jiǎn)單,堅(jiān)決不要相信用戶的任何輸入,并過(guò)濾掉輸入中的所有特殊字符。這樣就能消滅絕大部分的XSS攻擊。

目前防御XSS主要有如下幾種方式:

  1. 過(guò)濾特殊字符

    避免XSS的方法之一主要是將用戶所提供的內(nèi)容進(jìn)行過(guò)濾(如上面的script標(biāo)簽)。

  2. 使用HTTP頭指定類型

    w.Header().Set("Content-Type","text/javascript")

    這樣就可以讓瀏覽器解析javascript代碼,而不會(huì)是html輸出。

SQL注入

什么是SQL注入

攻擊者成功的向服務(wù)器提交惡意的SQL查詢代碼,程序在接收后錯(cuò)誤的將攻擊者的輸入作為查詢語(yǔ)句的一部分執(zhí)行,導(dǎo)致原始的查詢邏輯被改變,額外的執(zhí)行了攻擊者精心構(gòu)造的惡意代碼。

舉例:' OR '1'='1

這是最常見(jiàn)的 SQL注入攻擊,當(dāng)我們輸如用戶名 admin ,然后密碼輸如' OR '1'=1='1的時(shí)候,我們?cè)诓樵冇脩裘兔艽a是否正確的時(shí)候,本來(lái)要執(zhí)行的是SELECT * FROM user WHERE username='' and password='',經(jīng)過(guò)參數(shù)拼接后,會(huì)執(zhí)行 SQL語(yǔ)句 SELECT * FROM user WHERE username='' and password='' OR '1'='1',這個(gè)時(shí)候1=1是成立,自然就跳過(guò)驗(yàn)證了。

如下圖所示:

但是如果再嚴(yán)重一點(diǎn),密碼輸如的是';DROP TABLE user;--,那么 SQL命令為SELECT * FROM user WHERE username='admin' and password='';drop table user;--' 這個(gè)時(shí)候我們就直接把這個(gè)表給刪除了。

如何預(yù)防SQL注入

  • 在Java中,我們可以使用預(yù)編譯語(yǔ)句(PreparedStatement),這樣的話即使我們使用 SQL語(yǔ)句偽造成參數(shù),到了服務(wù)端的時(shí)候,這個(gè)偽造 SQL語(yǔ)句的參數(shù)也只是簡(jiǎn)單的字符,并不能起到攻擊的作用。

  • 對(duì)進(jìn)入數(shù)據(jù)庫(kù)的特殊字符('"尖括號(hào)&*;等)進(jìn)行轉(zhuǎn)義處理,或編碼轉(zhuǎn)換。

  • 在應(yīng)用發(fā)布之前建議使用專業(yè)的SQL注入檢測(cè)工具進(jìn)行檢測(cè),以及時(shí)修補(bǔ)被發(fā)現(xiàn)的SQL注入漏洞。網(wǎng)上有很多這方面的開源工具,例如sqlmap、SQLninja等。

  • 避免網(wǎng)站打印出SQL錯(cuò)誤信息,比如類型錯(cuò)誤、字段不匹配等,把代碼里的SQL語(yǔ)句暴露出來(lái),以防止攻擊者利用這些錯(cuò)誤信息進(jìn)行SQL注入。

在上圖展示中,使用了Java JDBC中的PreparedStatement預(yù)編譯預(yù)防SQL注入,可以看到將所有輸入都作為了字符串,避免執(zhí)行惡意SQL。

DDOS

什么是DDOS

DDOS:分布式拒絕服務(wù)攻擊(Distributed Denial of Service),簡(jiǎn)單說(shuō)就是發(fā)送大量請(qǐng)求是使服務(wù)器癱瘓。DDos攻擊是在DOS攻擊基礎(chǔ)上的,可以通俗理解,dos是單挑,而ddos是群毆,因?yàn)楝F(xiàn)代技術(shù)的發(fā)展,dos攻擊的殺傷力降低,所以出現(xiàn)了DDOS,攻擊者借助公共網(wǎng)絡(luò),將大數(shù)量的計(jì)算機(jī)設(shè)備聯(lián)合起來(lái),向一個(gè)或多個(gè)目標(biāo)進(jìn)行攻擊。

在技術(shù)角度上,DDoS攻擊可以針對(duì)網(wǎng)絡(luò)通訊協(xié)議的各層,手段大致有:TCP類的SYN Flood、ACK Flood,UDP類的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris類等等。一般會(huì)根據(jù)攻擊目標(biāo)的情況,針對(duì)性的把技術(shù)手法混合,以達(dá)到最低的成本最難防御的目的,并且可以進(jìn)行合理的節(jié)奏控制,以及隱藏保護(hù)攻擊資源。

下面介紹一下TCP協(xié)議中的SYN攻擊。

SYN攻擊

在三次握手過(guò)程中,服務(wù)器發(fā)送 SYN-ACK 之后,收到客戶端的 ACK 之前的 TCP 連接稱為半連接(half-open connect)。此時(shí)服務(wù)器處于 SYN_RCVD 狀態(tài)。當(dāng)收到 ACK 后,服務(wù)器才能轉(zhuǎn)入ESTABLISHED 狀態(tài).

SYN攻擊指的是,攻擊客戶端在短時(shí)間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送SYN包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn)。由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些偽造的SYN包將長(zhǎng)時(shí)間占用未連接隊(duì)列,正常的SYN請(qǐng)求被丟棄,導(dǎo)致目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者會(huì)引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。

如何預(yù)防DDOS

阿里巴巴的安全團(tuán)隊(duì)在實(shí)戰(zhàn)中發(fā)現(xiàn),DDoS 防御產(chǎn)品的核心是檢測(cè)技術(shù)和清洗技術(shù)。檢測(cè)技術(shù)就是檢測(cè)網(wǎng)站是否正在遭受 DDoS 攻擊,而清洗技術(shù)就是清洗掉異常流量。而檢測(cè)技術(shù)的核心在于對(duì)業(yè)務(wù)深刻的理解,才能快速精確判斷出是否真的發(fā)生了 DDoS 攻擊。清洗技術(shù)對(duì)檢測(cè)來(lái)講,不同的業(yè)務(wù)場(chǎng)景下要求的粒度不一樣。

CSRF

什么是CSRF

CSRF(Cross-site request forgery),中文名稱:跨站請(qǐng)求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

你這可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求。CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號(hào),甚至于購(gòu)買商品,虛擬貨幣轉(zhuǎn)賬......造成的問(wèn)題包括:個(gè)人隱私泄露以及財(cái)產(chǎn)安全。

CSRF的原理

下圖簡(jiǎn)單闡述了CSRF攻擊的思

從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個(gè)步驟:

  1. 登錄受信任網(wǎng)站A,并在本地生成Cookie。

  2. 在不登出A的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B。

看到這里,你也許會(huì)說(shuō):“如果我不滿足以上兩個(gè)條件中的一個(gè),我就不會(huì)受到CSRF的攻擊”。是的,確實(shí)如此,但你不能保證以下情況不會(huì)發(fā)生:

  1. 你不能保證你登錄了一個(gè)網(wǎng)站后,不再打開一個(gè)tab頁(yè)面并訪問(wèn)另外的網(wǎng)站。

  2. 你不能保證你關(guān)閉瀏覽器了后,你本地的Cookie立刻過(guò)期,你上次的會(huì)話已經(jīng)結(jié)束。(事實(shí)上,關(guān)閉瀏覽器不能結(jié)束一個(gè)會(huì)話,但大多數(shù)人都會(huì)錯(cuò)誤的認(rèn)為關(guān)閉瀏覽器就等于退出登錄/結(jié)束會(huì)話了......)

  3. 上圖中所謂的攻擊網(wǎng)站,可能是一個(gè)存在其他漏洞的可信任的經(jīng)常被人訪問(wèn)的網(wǎng)站。

下面講一講java解決CSRF攻擊的方式。

模擬CSRF攻擊

登錄A網(wǎng)站

用戶名和密碼都是admin。

http://localhost:8081/login.html:

你有權(quán)限刪除1號(hào)帖子

http://localhost:8081/deletePost.html:

登錄有CSRF攻擊A網(wǎng)站的B網(wǎng)站

http://localhost:8082/deletePost.html:

明顯看到B網(wǎng)站是8082端口,A網(wǎng)站是8081端口,但是B網(wǎng)站的刪除2號(hào)帖子功能依然實(shí)現(xiàn)。

如何預(yù)防CSRF攻擊

簡(jiǎn)單來(lái)說(shuō),CSRF 就是網(wǎng)站 A 對(duì)用戶建立信任關(guān)系后,在網(wǎng)站 B 上利用這種信任關(guān)系,跨站點(diǎn)向網(wǎng)站 A 發(fā)起一些偽造的用戶操作請(qǐng)求,以達(dá)到攻擊的目的。

而之所以可以完成攻擊是因?yàn)锽向A發(fā)起攻擊的時(shí)候會(huì)把A網(wǎng)站的cookie帶給A網(wǎng)站,也就是說(shuō)cookie已經(jīng)不安全了。

通過(guò)Synchronizer Tokens

Synchronizer Tokens: 在表單里隱藏一個(gè)隨機(jī)變化的 csrf_token csrf_token 提交到后臺(tái)進(jìn)行驗(yàn)證,如果驗(yàn)證通過(guò)則可以繼續(xù)執(zhí)行操作。這種情況有效的主要原因是網(wǎng)站 B 拿不到網(wǎng)站 A 表單里的 csrf_token

這種方式的使用條件是PHP和JSP等。因?yàn)閏ookie已經(jīng)不安全了,因此把csrf_token值存儲(chǔ)在session中,然后每次表單提交時(shí)都從session取出來(lái)放到form表單的隱藏域中,這樣B網(wǎng)站不可以得到這個(gè)存儲(chǔ)到session中的值。

下面是JSP的:

<input type="hidden" name="random_form" value=<%=random%>></input>

但是我現(xiàn)在的情況是html,不是JSP,并不能動(dòng)態(tài)的從session中取出csrf_token值。只能采用加密的方式了。

Hash加密cookie中csrf_token值

這可能是最簡(jiǎn)單的解決方案了,因?yàn)楣粽卟荒塬@得第三方的Cookie(理論上),所以表單中的數(shù)據(jù)也就構(gòu)造失敗了。

我采用的hash加密方法是JS實(shí)現(xiàn)Java的HashCode方法,得到hash值,這個(gè)比較簡(jiǎn)單。也可以采用其他的hash算法。

前端向后臺(tái)傳遞hash之后的csrf_token值和cookie中的csrf_token值,后臺(tái)拿到cookie中的csrf_token值后得到hashCode值然后與前端傳過(guò)來(lái)的值進(jìn)行比較,一樣則通過(guò)。

你有權(quán)限刪除3號(hào)帖子

http://localhost:8081/deletePost.html

B網(wǎng)站的他已經(jīng)沒(méi)有權(quán)限了

我們通過(guò)UserFilter.java給攻擊者返回的是403錯(cuò)誤,表示服務(wù)器理解用戶客戶端的請(qǐng)求但拒絕處理。

http://localhost:8082/deletePost.html:

攻擊者不能刪除4號(hào)帖子。

前端代碼:

deletePost.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>deletePost</title> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> function deletePost() { var url = '/post/' + document.getElementById("postId").value; var csrf_token = document.cookie.replace(/(?:(?:^|.*;s*)csrf_tokens*=s*([^;]*).*$)|^.*$/, "$1"); console.log('csrf_token=' + csrf_token); $.ajax({ type: "post",//請(qǐng)求方式 url: url, //發(fā)送請(qǐng)求地址 timeout: 30000,//超時(shí)時(shí)間:30秒 data: { "_method": "delete", "csrf_token": hash(csrf_token) // 對(duì)csrf_token進(jìn)行hash加密 }, dataType: "json",//設(shè)置返回?cái)?shù)據(jù)的格式 success: function (result) { if (result.message == "success") { $("#result").text("刪除成功"); } else { $("#result").text("刪除失敗"); } }, error: function () { //請(qǐng)求出錯(cuò)的處理 $("#result").text("請(qǐng)求出錯(cuò)"); } }); } // javascript的String到int(32位)的hash算法 function hash(str) { var hash = 0; if (str.length == 0) return hash; for (i = 0; i < str.length; i++) { char = str.charCodeAt(i); hash = ((hash << 5) - hash) + char; hash = hash & hash; // Convert to 32bit integer } return hash; } </script></head><body><h3>刪除帖子</h3>帖子編號(hào) : <input type="text" id="postId"/><button onclick="deletePost();">deletePost</button><br/><br/><br/><div> <p id="result"></p></div></body></html>

后臺(tái)代碼:

UserInterceptor.java

package cn.morethink.interceptor;import cn.morethink.util.JsonUtil;import cn.morethink.util.Result;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;/** * @author 李文浩 * @date 2018/1/4 */public class UserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String method = request.getMethod(); System.out.println(method); if (method.equalsIgnoreCase("POST") || method.equalsIgnoreCase("DELETE") || method.equalsIgnoreCase("PUT")) { String csrf_token = request.getParameter("csrf_token"); Cookie[] cookies = request.getCookies(); if (cookies != null && cookies.length > 0 && csrf_token != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("csrf_token")) { if (Integer.valueOf(csrf_token) == cookie.getValue().hashCode()) { return true; } } } } } Result result = new Result("403", "你還想攻擊我??????????", ""); PrintWriter out = response.getWriter(); out.write(JsonUtil.toJson(result)); out.close(); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}

注意

  1. cookie必須要設(shè)置PATH才可以生效,否則在下一次請(qǐng)求的時(shí)候無(wú)法帶給服務(wù)器。

  2. Spring Boot 出現(xiàn)啟動(dòng)找不到主類的問(wèn)題時(shí)可以mvn clean一下。

  3. Filter設(shè)置response.sendError(403)在Spring Boot沒(méi)有效果。

總結(jié)

上面一共提到了4種攻擊方式,分別是XSS攻擊(關(guān)鍵是腳本,利用惡意腳本發(fā)起攻擊),SQL注入(關(guān)鍵是通過(guò)用SQL語(yǔ)句偽造參數(shù)發(fā)出攻擊),DDOS攻擊(關(guān)鍵是發(fā)出大量請(qǐng)求,最后令服務(wù)器崩潰),CSRF攻擊(關(guān)鍵是借助本地cookie進(jìn)行認(rèn)證,偽造發(fā)送請(qǐng)求)。

參考文檔

  1. XSS實(shí)戰(zhàn):我是如何拿下你的百度賬號(hào)

  2. 總結(jié)幾種常見(jiàn)web攻擊手段及其防御方式

  3. 淺談CSRF攻擊方式

  4. jQueue 動(dòng)態(tài)設(shè)置form表單的action屬性的值和方法

  5. javascript的String到int(32位)的hash算法

  • 1.公司登記注冊(cè)于2003年1月27日,清遠(yuǎn)市桑達(dá)電子網(wǎng)絡(luò)媒體有限公司
    2.公司2006年起成為清遠(yuǎn)市政府定點(diǎn)協(xié)議供貨商,電子采購(gòu)供貨商
    3.公司2007年被清遠(yuǎn)市相關(guān)政府部門評(píng)為安防行業(yè)狀元
    4.公司2007年起成為長(zhǎng)城電腦清遠(yuǎn)如意服務(wù)站(SP368)
    5.公司2007年承建清遠(yuǎn)市橫河路口電子警察工程,開創(chuàng)清遠(yuǎn)電子警察先河。
  • 6.公司2007年起成為IBM合作伙伴、公司2010年底成為金蝶軟件清遠(yuǎn)金牌代理(伙伴編號(hào):30030013)
    7.公司組團(tuán)隊(duì)參加南方都市報(bào)組織的創(chuàng)富評(píng)選,獲廣東80強(qiáng)。公司申請(qǐng)多項(xiàng)軟件著作權(quán)、專利權(quán)
    8.2016年起公司成為粵東西北地區(qū)為數(shù)不多的雙軟企業(yè),確立“讓軟件驅(qū)動(dòng)世界,讓智能改變生活!"企業(yè)理想
    9.2016-01-29更名為廣東互動(dòng)電子網(wǎng)絡(luò)媒體有限公司
    10.2021-01-13更名為廣東互動(dòng)電子有限公司
  • 投資合作咨詢熱線電話:0763-3391888 3323588
  • 做一個(gè)負(fù)責(zé)任的百年企業(yè)! 天行健,君子以自強(qiáng)不息;地勢(shì)坤,君子以厚德載物;
    為用戶創(chuàng)造價(jià)值! 讓軟件驅(qū)動(dòng)世界; 讓智能改變生活; 超越顧客期望,幫助顧客成功;
    對(duì)客戶負(fù)責(zé),對(duì)員工負(fù)責(zé),對(duì)企業(yè)命運(yùn)負(fù)責(zé)!幫助支持公司的客戶成功;幫助忠誠(chéng)于公司的員工成功!
  • 聯(lián)系電話:0763-3391888 3323588 3318977
    服務(wù)熱線:18023314222 QQ:529623964
  • 工作QQ:2501204690 商務(wù)QQ: 602045550
    投資及業(yè)務(wù)投訴QQ: 529623964
    微信:小米哥 微信號(hào):qysed3391888
    騰訊微博:桑達(dá)網(wǎng)絡(luò)-基石與起點(diǎn)
  • E-MAIL:222#QYSED.CN ok3391888#163.com (請(qǐng)用@替換#)
在線客服
  • 系統(tǒng)集成咨詢
    點(diǎn)擊這里給我發(fā)消息
  • 網(wǎng)站\微信\軟件咨詢
    點(diǎn)擊這里給我發(fā)消息
  • 售后服務(wù)
    點(diǎn)擊這里給我發(fā)消息
  • 投資合作
    點(diǎn)擊這里給我發(fā)消息