真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

常見web攻擊有哪些

這篇文章給大家分享的是有關(guān)常見web攻擊有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

10多年專注成都網(wǎng)站制作,成都定制網(wǎng)頁設(shè)計,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁設(shè)計,高端網(wǎng)頁制作,對垃圾桶等多個行業(yè),擁有多年的營銷推廣經(jīng)驗。

XSS

什么是XSS

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

XSS通常可以分為兩大類:

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

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

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

如圖:
常見web攻擊有哪些

如何預(yù)防XSS

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

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

  1. 過濾特殊字符
    避免XSS的方法之一主要是將用戶所提供的內(nèi)容進行過濾(如上面的script標簽)。

  2. 使用HTTP頭指定類型
    w.Header().Set("Content-Type","text/javascript")
    這樣就可以讓瀏覽器解析javascript代碼,而不會是html輸出。

SQL注入

什么是SQL注入

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

舉例:' OR '1'='1

這是最常見的 SQL注入攻擊,當我們輸如用戶名 admin ,然后密碼輸如' OR '1'=1='1的時候,我們在查詢用戶名和密碼是否正確的時候,本來要執(zhí)行的是SELECT * FROM user WHERE username='' and password='',經(jīng)過參數(shù)拼接后,會執(zhí)行 SQL語句 SELECT * FROM user WHERE username='' and password='' OR '1'='1',這個時候1=1是成立,自然就跳過驗證了。
如下圖所示:

常見web攻擊有哪些

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

如何預(yù)防SQL注入

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

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

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

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

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

DDOS

什么是DDOS

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

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

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

SYN攻擊

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

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

如何預(yù)防DDOS

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

CSRF

什么是CSRF

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

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

CSRF的原理

下圖簡單闡述了CSRF攻擊的思
常見web攻擊有哪些

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

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

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

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

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

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

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

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

模擬CSRF攻擊

登錄A網(wǎng)站

用戶名和密碼都是admin。

http://localhost:8081/login.html:
常見web攻擊有哪些

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

http://localhost:8081/deletePost.html:
常見web攻擊有哪些

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

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

常見web攻擊有哪些

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

如何預(yù)防CSRF攻擊

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

而之所以可以完成攻擊是因為B向A發(fā)起攻擊的時候會把A網(wǎng)站的cookie帶給A網(wǎng)站,也就是說cookie已經(jīng)不安全了。

通過Synchronizer Tokens

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

這種方式的使用條件是PHP和JSP等。因為cookie已經(jīng)不安全了,因此把csrf_token值存儲在session中,然后每次表單提交時都從session取出來放到form表單的隱藏域中,這樣B網(wǎng)站不可以得到這個存儲到session中的值。

下面是JSP的:

>

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

Hash加密cookie中csrf_token值

這可能是最簡單的解決方案了,因為攻擊者不能獲得第三方的Cookie(理論上),所以表單中的數(shù)據(jù)也就構(gòu)造失敗了。

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

前端向后臺傳遞hash之后的csrf_token值和cookie中的csrf_token值,后臺拿到cookie中的csrf_token值后得到hashCode值然后與前端傳過來的值進行比較,一樣則通過。

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

http://localhost:8081/deletePost.html

常見web攻擊有哪些

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

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

http://localhost:8082/deletePost.html:
常見web攻擊有哪些

攻擊者不能刪除4號帖子。

前端代碼:

deletePost.html




    
    deletePost
    
    
        function deletePost() {
            var url = '/post/' + document.getElementById("postId").value;
            var csrf_token = document.cookie.replace(/(?:(?:^|.*;\s*)csrf_token\s*\=\s*([^;]*).*$)|^.*$/, "$1");
            console.log('csrf_token=' + csrf_token);
            $.ajax({
                type: "post",//請求方式
                url: url,  //發(fā)送請求地址
                timeout: 30000,//超時時間:30秒
                data: {
                    "_method": "delete",
                    "csrf_token": hash(csrf_token) // 對csrf_token進行hash加密
                },
                dataType: "json",//設(shè)置返回數(shù)據(jù)的格式
                success: function (result) {
                    if (result.message == "success") {
                        $("#result").text("刪除成功");
                    } else {
                        $("#result").text("刪除失敗");
                    }
                },
                error: function () { //請求出錯的處理
                    $("#result").text("請求出錯");
                }
            });
        }
        // 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;
        }
    


刪除帖子

帖子編號 :  deletePost


    

后臺代碼:

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才可以生效,否則在下一次請求的時候無法帶給服務(wù)器。

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

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

感謝各位的閱讀!關(guān)于“常見web攻擊有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


網(wǎng)站題目:常見web攻擊有哪些
URL標題:http://weahome.cn/article/pejjch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部