xss安全漏洞分析以及專案實施解決方案

2021-08-11 05:38:20 字數 3898 閱讀 2777

近期公司專案正好被檢查出xss漏洞,一直以來其實都知道xss漏洞,不過並沒有實際去寫過,正好這兩天處理了xss漏洞,下面來說一說xss漏洞相關的知識,以及我在專案中如何去解決xss漏洞。

引言:

由於web前端的高速發展,現在的web應用都會使用大量的動態內容和動態互動來提高使用者的使用體驗,那麼,動態內容會根據使用者的環境來輸出相應的內容。在這個內容上,就會受到「跨站指令碼攻擊」(cross site scripting,縮寫為xss)的威脅。

xss是一種常見的web安全漏洞,它允許攻擊者將惡意**植入到提供其他使用者使用的頁面中,不同於大部分攻擊,xss涉及到三方,攻擊者、客戶端與web應用,xss攻擊目標是為了盜取存在客戶端的cookie或其它**使用者識別客戶端身份的敏感資訊,一單獲取到合法使用者資訊,攻擊者甚至可以假冒合法使用者和**進行互動。

xss分類:

xss目前的主要手段和目的如下:

web應用未對使用者提交請求的資料做充分的檢查過濾,允許使用者在提交的資料中摻入html**(最主要的是「>」、「<」),並將未經轉義的惡意**輸出到第三方使用者的瀏覽器解釋執行,是導致xss漏洞的產生原因。

接下來以反射性xss舉例說明xss的過程:現在有乙個**,根據引數輸出使用者的名稱,例如訪問url:,就會在瀏覽器輸出如下資訊:

hello astaxie
在我們的admin系統中,由於使用的spring.php框架過於陳舊,沒有使用xss過濾,所以在系統多處均有xss漏洞,而在dsp系統中,spring.php框架提供了xss過濾功能,但是在使用中發現由於場景的需要,有些頁面可能需要傳遞json,不能使用xss過濾,需要將其轉換為php陣列再將其屬性進行xss過濾,但是這部分工作由於開發人員的疏忽,導致xss漏洞的存在,通過綠盟的掃瞄,我們及時對這種漏洞進行修復。

​ 首先我們需要乙個在統一***裡面對引數進行xss過濾,在spring.php(公司自研發的php框架)框架中使用request來統一獲取由前端進行的web請求傳遞的引數值,通過對引數值的解析過濾,達到xss的效果,但是我們實際業務在獲取引數的時候可能需要不過濾的內容(例如傳遞json),那麼這個時候,我們需要設計兩種方案,實現拿到安全的引數或不過濾的引數。

class

request

extends

singletonbase

return

$param;

}/**

* 獲取表單請求引數

*@param string $name 請求引數名稱

*/public

static

function

form

($name = '')

/*** 獲取url請求引數

*@param string $name 請求引數名稱

*/public

static

function

query

($name = '')

/*** 獲取請求引數

*@param string $name 請求引數名稱

*/public

static

function

rawparams

($name = '')

return

$param;

}/**

* 獲取表單請求引數

*@param string $name 請求引數名稱

*/public

static

function

rawform

($name = '')

/*** 獲取url請求引數

*@param string $name 請求引數名稱

*/public

static

function

rawquery

($name = '')

/*** 獲取頁面全位址

*/public

static

function

getfullurl

()

/*** 載入

}}request::create();

通過分析**,我們可以看到request在建立的時候會執行它的建構函式oncreate,那麼每一次的web請求,均會呼叫oncreate方法,我們在此處可以對引數值進行篩選過濾,在引數中,我們設定了兩種引數,他們都存放著web傳遞的值,這裡我們暫時只舉get的例子,self::getself::$raw_get,get用於存放過濾後的內容,raw_get用於存放未過濾的內容,方便我們實際業務的獲取。在stringutil::string_remove_xss($value)方法裡面,我們去實際過濾下xss。

方法內容:

/**

* 移除陣列的xss

*@param $array

*@return mixed

*/public

static

function

array_remove_xss

($array)

else

}return

$array;

}public

static

function

string_remove_xss

($html)

else

if (!is_string($html))

if (!get_magic_quotes_gpc()) //不對magic_quotes_gpc轉義過的字元使用addslashes(),避免雙重轉義。

$html = preg_replace($ra, '', $html); //刪除非列印字元,粗暴式過濾xss可疑字串

$html = htmlentities($html); //去除 html 和 php 標記並轉換為 html 實體

return

$html;

}

在篩選過濾中,我們首先對型別進行判斷,如果是陣列需要進行迴圈讀取屬性再呼叫string_remove_xss方法,

後面幾步均有注釋說明。

在實際業務使用中,我們只需要使用request::params()方法獲取web網頁傳遞過濾後的值,使用request::rawparams()方法獲取web網頁傳遞過濾的值。至此,xss漏洞的輸入點防護解決完畢。

最後

在現代基於mvvm框架的的spa(單頁應用)不需要重新整理url來控制view,這樣可以大大防止xss隱患,例如vue.js react.js在設計的時候設計者已經考慮了xss對html插值的攻擊,我們使用者只需要熟練正確地使用他們,大部分情況下可以避免xss攻擊。

Jsonp常見安全漏洞分析

jsonp json with padding 是資料格式 json 的一種 使用模式 可以讓網頁從別的網域要資料。這個解釋來自於網際網路上面的答案。jsonp只是 一種使用json模式,之所以能夠很廣泛使用。主要用它來解決跨域訪問問題。可以方便跨網域名稱傳輸資料。一些是乙個jsonp的例子。但是,...

Linux Bash安全漏洞以及各環境修復解決方法

env i x a bash c echo date cat echo 執行上面的命令,如果有出現下面的反饋資訊說存在漏洞需要補丁。如果有出現上面的字元說明是有漏洞的,然後看下面根據不同系統環境公升級補丁。老左需要說的是,以防止萬一我們需要先做好備份,萬一出現不相容問題導致系統錯誤我們還可以補救備份...

產品常見安全漏洞挖掘和分析以及解決方案

原理 當函式內的乙個陣列緩衝區接受使用者輸入的時候,未對輸入的長度進行合法性檢查時,可以構造資料覆蓋超過緩衝區的高位址上原本的其他棧幀資料,如果本身的資料內就儲存了一系列的指令的二進位制 一旦棧溢位修改了函式的返回位址,並將該位址指向這段二進位制 的起始位置,那麼就形成成了基本的溢位攻擊行為。防護措...