前端面試題集每日一練Day5

問題先導

  • 什么是XSS攻擊(概念、攻擊方式、危害)?如何預防XSS攻擊?【瀏覽器

  • 兩數(shù)之和算法

    求給定數(shù)組中和為指定數(shù)字的兩個下標。
    輸入:nums = [2,7,11,15], target = 9
    輸出:[0,1]
    解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
    

知識梳理

什么是XSS攻擊?如何預防XSS攻擊?

概念

XSS是Cross Site Scripting的縮寫,由于CSS網(wǎng)頁設計領域已經(jīng)被廣泛指層疊樣式表(Cascading Style Sheets),而Cross又有“交叉”的含義,所以將Cross改以交叉形的X做為縮寫。因此XSS就是我們常說的跨站腳本攻擊。

跨站腳本攻擊是一種安全漏洞,攻擊者可以利用這種漏洞向網(wǎng)站注入具有攻擊性的腳本代碼,當被攻擊者登錄網(wǎng)站時就會自動執(zhí)行這些惡意代碼,攻擊者甚至可以突破網(wǎng)站訪問權,冒充受害者,并進行更多攻擊性操作。

根據(jù)開放式 Web 應用安全項目(OWASP),XSS 在 2017 年被認為 7 種最常見的 Web 應用程序漏洞之一

攻擊方式

XSS根據(jù)攻擊腳本的來源不同,一般分為三種類型:

  • 存儲型XSS:惡意腳本存儲到了目標服務器上。當瀏覽器請求到數(shù)據(jù)時,腳本從服務器上傳并執(zhí)行。
  • 反射型XSS:當用戶點擊一個惡意鏈接,或者提交一個表單,或者進入一個惡意網(wǎng)站時,注入腳本進入被攻擊者的網(wǎng)站。Web服務器將注入腳本,比如一個錯誤信息,搜索結(jié)果等 返回到用戶的瀏覽器上。由于瀏覽器認為這個響應來自"可信任"的服務器,所以會執(zhí)行這段腳本。
  • 基于DOM的XSS:通過修改原始的客戶端代碼,受害者瀏覽器的 DOM 環(huán)境改變,導致有效載荷的執(zhí)行。也就是說,頁面本身并沒有變化,但由于DOM環(huán)境被惡意修改,有客戶端代碼被包含進了頁面,并且意外執(zhí)行。

簡答來說,存儲型XSS腳本被存儲到了服務器中,并由服務器上傳至頁面并執(zhí)行,存儲型XSS也稱為持久性XSS,由于攻擊腳本被存儲到了服務器,可見其危害之廣、影響之大。

比如較為經(jīng)典的留言板持久型XSS攻擊,如某網(wǎng)站對用戶輸入沒有做特殊處理,而用戶直接輸入類似下面的內(nèi)容:

<script>alert(“you see me!”)</script>

由于留言板會緩存到服務器,讓每個人都能看到,當用戶打開這個留言頁面時,就會觸發(fā)這段腳本代碼。

而非持久性也就是反射型XSS,一般是用戶經(jīng)過某些惡意鏈接后重定向回某個可信任網(wǎng)站,但由于這些惡意鏈接攜帶了一些攻擊性的表單信息,并被重定向的網(wǎng)站攜帶回來,然后在用戶界面執(zhí)行。由于腳本由用戶觸發(fā),服務器只是中轉(zhuǎn)站,然后又帶回給頁面,所以稱之為反射型XSS。經(jīng)過了可信任服務器的”轉(zhuǎn)載“,這些來自惡意網(wǎng)站的腳本就變成了可信任數(shù)據(jù),然后被執(zhí)行。

比如某個惡意鏈接中攜帶了腳本代碼:

<a
   >
點我就送大驚喜</a>

而某些攻擊者利用http://192.168.1.102/xss/example.php這個頁面的打開邏輯,知道name參數(shù)會被插入頁面進而編寫了具有攻擊性的誘導鏈接,當用戶點擊之后就觸發(fā)了設計好的腳本代碼。

最后一種,基于DOM的XSS不常見,這往往是瀏覽器環(huán)境被惡意篡改導致了惡意代碼在某些頁面上的執(zhí)行。

危害

如果腳本在頁面執(zhí)行,最壞的情況就是頁面上的所有信息都被獲取,甚至偽造成用戶與服務器進行交互,進行更大的破壞。一般來說,有以下幾方面的危害:

  • 獲取隱私數(shù)據(jù):客戶cookie、session等網(wǎng)站信息
  • DOS攻擊:向服務器發(fā)送請求,占用服務器資源,讓用戶無法正常訪問服務器
  • 修改頁面信息
  • 流量劫持。將鏈接指向其他網(wǎng)站,進一步進行惡意控制或其他操作。

如何預防XSS攻擊

從XSS的攻擊方式來看,造成腳本執(zhí)行的原因有兩方面,一是服務器接收了腳本,但沒有識別,讓客戶端保持了信任條件,二是瀏覽器本身沒有對腳本進行甄別,我們發(fā)現(xiàn),惡意腳本執(zhí)行基本都是要操作DOM才能出發(fā)的,而DOM的操作是客戶端能夠控制的。所以,XSS的預防要從服務器端和客戶端兩頭抓

針對不同的腳本攻擊有不同的處理辦法,可能有的攻擊方式還未出現(xiàn),但層層把關是我們能做到的:

  • 對上傳的用戶數(shù)據(jù)進行轉(zhuǎn)譯處理:客戶端轉(zhuǎn)譯或進行輸入限制;服務器端也要進行轉(zhuǎn)譯,避免漏網(wǎng)之魚。

  • DOM操作慎之又慎:很多時候DOM操作不規(guī)范才使得腳本語言有機可乘,要對DOM來源有明確的把控。

  • 設置CSP安全策略。嚴格的CSP設置可以

    • 禁止加載外域代碼,防止復雜的攻擊邏輯。

    • 禁止外域提交,網(wǎng)站被攻擊后,用戶的數(shù)據(jù)不會泄露到外域。

    • 禁止內(nèi)聯(lián)腳本執(zhí)行(規(guī)則較嚴格,目前發(fā)現(xiàn) GitHub 使用)。

    • 禁止未授權的腳本執(zhí)行(新特性,Google Map 移動版在使用)。

    • 合理使用上報可以及時發(fā)現(xiàn) XSS,利于盡快修復問題。

      更多細節(jié)可參考內(nèi)容安全策略( CSP ) - MDN

  • 增強對敏感數(shù)據(jù)的保護,提交攻擊門檻:比如cookie中使用http-only,讓腳本無法獲取隱私信息,設置驗證操作等提高腳本攻擊門檻。

  • 主動檢測:利用XSS攻擊檢測工具掃描網(wǎng)站數(shù)據(jù)是否存在XSS漏洞。

擴展:XSS攻擊小游戲

以下是幾個 XSS 攻擊小游戲,開發(fā)者在網(wǎng)站上故意留下了一些常見的 XSS 漏洞。玩家在網(wǎng)頁上提交相應的輸入,完成 XSS 攻擊即可通關。

參考:

關鍵字:瀏覽器安全、XSS

兩數(shù)之和

求給定數(shù)組中和為指定數(shù)字的兩個下標。
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

暴力解法很容易想到,遍歷數(shù)組兩兩相加來判斷是否等于目標值即可。

我們發(fā)現(xiàn)關鍵語句為nums[i] + nums[j] == target,這樣我們需要知道同時知道ij才行,這樣就不得不遍歷兩次數(shù)組。

實際上,這個關鍵式子可以轉(zhuǎn)換為求差:nums[i] == target - nums[j]。看似沒有區(qū)別,但我們可以理解為判斷目標值與下標j的差是否為出現(xiàn)過的num[i]的值,我們一般遍歷一遍記錄nums[i]的值即可,這樣,當遇到適合的nums[j]就能匹配上,也就只需要遍歷一遍數(shù)組。

參考代碼:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
 var twoSum = function(nums, target) {
    const map = new Map(); // 存儲遍歷過的數(shù)據(jù)
    for(let i  = 0; i < nums.length; i++) {
        const diff = target - nums[i];
        if(map.has(diff)) {
            return [map.get(diff), i];
        }
        map.set(nums[i], i);
    }
 }

關鍵字:轉(zhuǎn)變求解思路,異曲同工

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內(nèi)容