XSS過濾詳解

一、 Xss過濾括弧

XSS漏洞一般來說由用戶輸入的信息中注入了腳本,導致惡意代碼被執行。其中括弧也是常被利用的一種方式。攻擊者會在用戶輸入的內容中注入特殊字元,其中包括左括弧「」,這樣一來在渲染該內容時,瀏覽器將把其中的代碼當做HTML標籤來執行,從而造成腳本注入漏洞。因此在XSS過濾中,第一步往往是過濾掉輸入內容中的括弧。

var content = document.getElementById("input").value; 
content = content.replace(//g,">");
document.getElementById("output").innerHTML = content;

以上代碼使用正則表達式替換輸入內容中的左右尖括弧為實體字元,從而保證在瀏覽器中渲染時,這些字元不會被當做標籤執行,從而有效防止了XSS攻擊。

二、 Xss過濾了尖括弧雙引號

除了括弧,尖括弧和雙引號也是常被利用的注入方式。比如:攻擊者可以把惡意腳本通過輸入框注入到頁面,通過獲取用戶的cookie來發起會話劫持。因此XSS過濾器也需要針對這些字元進行過濾。

function xss_filter(str){
  str = str.replace(/[&'"]/g,function(c){
    return {'':'>','&':'&',
    '\'':''','"':'"'}[c];
  });
  return str;
}
var content = document.getElementById("input").value; 
document.getElementById("output").innerHTML = xss_filter(content);

以上代碼使用正則表達式替換輸入內容中的尖括弧、單引號、雙引號為實體字元,從而避免了可能存在的XSS攻擊。

三、 Xss過濾器

XSS過濾器是一類專門用於對輸入文本進行過濾的工具,可以有效防止XSS攻擊。其原理是對輸入內容進行預處理,去除其中的惡意代碼,從而避免了該代碼被執行的風險。常見的XSS過濾器有Google的CSP、OWASP ESAPI等。

四、 Xss過濾js

當用戶輸入的內容包含了JavaScript代碼時,XSS攻擊可通過這些代碼注入惡意操作,如盜取用戶數據等。因此過濾用戶輸入的JavaScript代碼將成為XSS防護的首要任務。對於這種情況,需要對用戶輸入的JavaScript代碼進行白名單過濾,防止惡意代碼的注入。在白名單中只允許html標籤、屬性和指定的javascript語句。

function xss_javascript_filter(str){
  str = str.replace(//gmi, '');
  var div = document.createElement('div');
  div.innerHTML = str;
  var scripts = div.getElementsByTagName('script');
  var i = scripts.length;
  while (i--) {
    scripts[i].parentNode.removeChild(scripts[i]);
  }
  return div.innerHTML;
}
var content = document.getElementById("input").value; 
document.getElementById("output").innerHTML = xss_javascript_filter(content);

以上代碼在刪除輸入文本中的標籤後,通過動態創建div元素將整個文本串插入其中,從而將任何外部JavaScript代碼去除,有效防止JavaScript注入。

五、 Xss過濾原理

XSS過濾主要依靠對輸入內容的預處理來實現,其過程包括了以下幾個步驟:

1. 對輸入文本進行Unicode編碼,將其轉換為一系列的Unicode字元。

轉換前:'alert('XSS')'
轉換後:<script>alert('XSS')</script>

2. 進行標籤過濾,去掉文本中的HTML標籤。

轉換前:<script>alert('XSS')</script>
轉換後:alert('XSS')

3. 對一些特殊字元進行轉義,如尖括弧、單引號、雙引號等。

轉換前:"&"
轉換後:&

4. 最終得到經過處理後的安全文本,通過重新渲染頁面來呈現。

六、 Xss過濾函數

在實際的開發中,我們可以通過封裝一些通用的XSS過濾函數來避免重複勞動。下面是一個簡單的XSS過濾函數:

function xss_filter(str){
  str = str.replace(/[&'"]/g,function(c){
    return {'':'>','&':'&',
    '\'':''','"':'"'}[c];
  });
  return str;
}

七、 Xss過濾 機制

XSS過濾機制是指瀏覽器或伺服器在處理前端提交的數據時,對用戶輸入的內容進行安全性檢驗和過濾,有效防止惡意代碼被注入。在前端,常見的XSS過濾機制包括輸入校驗,禁止HTML標籤,轉換特殊字元等。而在後端,往往需要依賴框架或平台提供的安全機制來過濾用戶提交的數據。

八、 Xss過濾alert

在XSS攻擊中,alert對開發者非常友好,往往可以直接利用來證明漏洞的存在。因此在進行XSS過濾時,也需要考慮到alert的相關問題。

function is_numeric(val){
    var patrn=/^-?\d.?\d*$/;
    return patrn.exec(val);
}
function xss_filter(str){
    if(typeof str !== 'string' || str === '') return '';
    str = str.replace(//g,">");
    var patt=/]*>(.*?)/gmi;
    str = str.replace(patt, function(match,$1){
        if($1.toLowerCase() === 'script' || $1.toLowerCase() === 'iframe'){
            return '';
        }
        return match;
    });
    if(is_numeric(str)) str = '' + str + '';
    return str;
}

window.alert = function(val){
    return true;
};

以上代碼通過覆蓋alert函數的方式來過濾掉alert的調用。同時,還在xss_filter函數中添加了判斷是否為數字的校驗(因為數字不會產生xss攻擊),從而進一步提高了安全性。

九、 Xss filter的作用

XSS Filter的主要作用是對用戶輸入的不可信數據進行檢測和過濾,防止其中的惡意代碼執行,從而保障Web應用的安全性。通過使用XSS Filter,我們可以實現以下目標:

1、過濾掉惡意腳本,防止XSS攻擊。

2、剝離出輸入文本中的HTML標籤,並將其轉換為實體字元。

3、對於純文本或富文本,只允許安全的標記和屬性,並對其中的特殊字元進行過濾。

4、保護敏感的數據,例如cookie、session id等。

十、 Xss繞過尖括弧

尖括弧繞過是XSS攻擊中最常見的攻擊方式之一。攻擊者通過將惡意代碼中的尖括弧進行URL編碼的方式來規避XSS過濾器的檢測,隨後再重新解碼成尖括弧進行執行。

輸入:<s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;&colon;alert&lpar;1&rpar;&Tab;&Tab;&Tab;&Tab;
過濾後:<script>alert(1)</script>
輸出:alert(1)

為了避免尖括弧繞過攻擊,開發者需要對輸入文本進行多重過濾和檢測,使用白名單過濾器來限制輸入內容,並且在輸出之前對其中的特殊字元進行轉義。

原創文章,作者:HJECJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/328979.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HJECJ的頭像HJECJ
上一篇 2025-01-14 18:54
下一篇 2025-01-14 18:54

相關推薦

  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25

發表回復

登錄後才能評論