前端3年以上面試常考問的web安全問題總結(jié)
大廠技術(shù)??高級前端??Node進(jìn)階
點(diǎn)擊上方?程序員成長指北,關(guān)注公眾號
回復(fù)1,加入高級Node交流群
大家好,今天給大家介紹一下,Web安全領(lǐng)域常見的一些安全問題。
1、SQL 注入
SQL注入攻擊的核心在于讓W(xué)eb服務(wù)器執(zhí)行攻擊者期望的SQL語句,以便得到數(shù)據(jù)庫中的感興趣的數(shù)據(jù)或?qū)?shù)據(jù)庫進(jìn)行讀取、修改、刪除、插入等操作,達(dá)到其邪惡的目的。
而如何讓W(xué)eb服務(wù)器執(zhí)行攻擊者的SQL語句呢?SQL注入的常規(guī)套路在于將SQL語句放置于Form表單或請求參數(shù)之中提交到后端服務(wù)器,后端服務(wù)器如果未做輸入安全校驗(yàn),直接將變量取出進(jìn)行數(shù)據(jù)庫查詢,則極易中招。
舉例如下:
對于一個(gè)根據(jù)用戶ID獲取用戶信息的接口,后端的SQL語句一般是這樣:
select?name,[...]?from?t_user?whereid=$id
其中,$id就是前端提交的用戶id,而如果前端的請求是這樣:
GET?xx/userinfo?id=1%20or%201=1
其中請求參數(shù)id轉(zhuǎn)義后就是1 or 1=1,如果后端不做安全過濾直接提交數(shù)據(jù)庫查詢,SQL語句就變成了:
select?name,[...]?from?t_user?whereid=1or1=1
其結(jié)果是把用戶表中的所有數(shù)據(jù)全部查出,達(dá)到了黑客泄露數(shù)據(jù)的目的。
以上只是一個(gè)極簡單的示例,在真實(shí)的SQL注入攻擊中參數(shù)構(gòu)造和SQL語句遠(yuǎn)比這復(fù)雜得多,不過原理是一致的。
2、XSS 攻擊
XSS全稱跨站腳本攻擊(Cross Site Scripting),為了與重疊樣式表CSS區(qū)分,換了另一個(gè)縮寫XSS。
XSS攻擊的核心是將可執(zhí)行的前端腳本代碼(一般為JavaScript)植入到網(wǎng)頁中,聽起來比較拗口,用大白話說就是攻擊者想讓你的瀏覽器執(zhí)行他寫的JS代碼。那如何辦到呢?一般XSS分為兩種:
反射型
1、攻擊者將JS代碼作為請求參數(shù)放置URL中,誘導(dǎo)用戶點(diǎn)擊
示例:
http://localhost:8080/test?name=
2、用戶點(diǎn)擊后,該JS作為請求參數(shù)傳給Web服務(wù)器后端 3、后端服務(wù)器沒有檢查過濾,簡單處理后放入網(wǎng)頁正文中返回給瀏覽器 4、瀏覽器解析返回的網(wǎng)頁,中招!
存儲型
上述方式攻擊腳本直接經(jīng)服務(wù)器轉(zhuǎn)手后返回瀏覽器觸發(fā)執(zhí)行,存儲型與之的區(qū)別在于能夠?qū)⒐裟_本入庫存儲,在后面進(jìn)行查詢時(shí),再將攻擊腳本渲染進(jìn)網(wǎng)頁,返回給瀏覽器觸發(fā)執(zhí)行。常見的套路舉例如下:
1、攻擊者網(wǎng)頁回帖,帖子中包含JS腳本 2、回帖提交服務(wù)器后,存儲至數(shù)據(jù)庫 3、其他網(wǎng)友查看帖子,后臺查詢該帖子的回帖內(nèi)容,構(gòu)建完整網(wǎng)頁,返回瀏覽器 4、該網(wǎng)友瀏覽器渲染返回的網(wǎng)頁,中招!
3、CSRF 攻擊
CSRF,跨站請求偽造,其核心思想在于,在打開A網(wǎng)站的情況下,另開Tab頁面打開惡意網(wǎng)站B,此時(shí)在B頁面的“唆使”下,瀏覽器發(fā)起一個(gè)對網(wǎng)站A的HTTP請求。這個(gè)過程的危害在于2點(diǎn):
1、這個(gè)HTTP請求不是用戶主動意圖,而是B“唆使的”,如果是一個(gè)危害較大的請求操作(發(fā)郵件?刪數(shù)據(jù)?等等)那就麻煩了 2、因?yàn)橹癆網(wǎng)站已經(jīng)打開了,瀏覽器存有A下發(fā)的Cookie或其他用于身份認(rèn)證的信息,這一次被“唆使”的請求,將會自動帶上這些信息,A網(wǎng)站后端分不清楚這是否是用戶真實(shí)的意愿
4、DDoS 攻擊
DDoS全稱Distributed Denial of Service:分布式拒絕服務(wù)攻擊(在這個(gè)文章里也有介紹:)。是拒絕服務(wù)攻擊的升級版。拒絕攻擊服務(wù)顧名思義,讓服務(wù)不可用。常用于攻擊對外提供服務(wù)的服務(wù)器,像常見的:
Web服務(wù) 郵件服務(wù) DNS服務(wù) 即時(shí)通訊服務(wù) ......
攻擊者不斷地提出服務(wù)請求,讓合法用戶的請求無法及時(shí)處理,這就是 DoS 攻擊。
攻擊者使用多臺計(jì)算機(jī)或者計(jì)算機(jī)集群進(jìn)行 DoS 攻擊,就是 DDoS 攻擊。
在早期互聯(lián)網(wǎng)技術(shù)還沒有那么發(fā)達(dá)的時(shí)候,發(fā)起DoS攻擊是一件很容易的事情:一臺性能強(qiáng)勁的計(jì)算機(jī),寫個(gè)程序多線程不斷向服務(wù)器進(jìn)行請求,服務(wù)器應(yīng)接不暇,最終無法處理正常的請求,對別的正常用戶來說,看上去網(wǎng)站貌似無法訪問,拒絕服務(wù)就是這么個(gè)意思。
后來隨著技術(shù)對發(fā)展,現(xiàn)在的服務(wù)器早已不是一臺服務(wù)器那么簡單,你訪問一個(gè)www.baidu.com的域名,背后是數(shù)不清的CDN節(jié)點(diǎn),數(shù)不清的Web服務(wù)器。
這種情況下,還想靠單臺計(jì)算機(jī)去試圖讓一個(gè)網(wǎng)絡(luò)服務(wù)滿載,無異于雞蛋碰石頭,對方?jīng)]趴下,自己先趴下了。
技術(shù)從來都是一柄雙刃劍,分布式技術(shù)既可以用來提供高可用的服務(wù),也能夠被攻擊方用來進(jìn)行大規(guī)模殺傷性攻擊。攻擊者不再局限于單臺計(jì)算機(jī)的攻擊能力,轉(zhuǎn)而通過成規(guī)模的網(wǎng)絡(luò)集群發(fā)起拒絕服務(wù)攻擊。
5、DNS劫持
當(dāng)今互聯(lián)網(wǎng)流量中,以HTTP/HTTPS為主的Web服務(wù)產(chǎn)生的流量占據(jù)了絕大部分。Web服務(wù)發(fā)展的如火如荼,這背后離不開一個(gè)默默無聞的大功臣就是域名解析系統(tǒng):
如果沒有DNS,我們上網(wǎng)需要記憶每個(gè)網(wǎng)站的IP地址而不是他們的域名,這簡直是災(zāi)難,好在DNS默默在背后做了這一切,我們只需要記住一個(gè)域名,剩下的交給DNS來完成吧。
也正是因?yàn)槠渲匾裕瑒e有用心的人自然是不會放過它,DNS劫持技術(shù)被發(fā)明了出來。
DNS提供服務(wù)用來將域名轉(zhuǎn)換成IP地址,然而在早期協(xié)議的設(shè)計(jì)中并沒有太多考慮其安全性,對于查詢方來說:
我去請求的真的是一個(gè)DNS服務(wù)器嗎?是不是別人冒充的? 查詢的結(jié)果有沒有被人篡改過?這個(gè)IP真是這個(gè)網(wǎng)站的嗎?
DNS協(xié)議中沒有機(jī)制去保證能回答這些問題,因此DNS劫持現(xiàn)象非常泛濫,從用戶在地址欄輸入一個(gè)域名的那一刻起,一路上的兇險(xiǎn)防不勝防:
本地計(jì)算機(jī)中的木馬修改hosts文件 本地計(jì)算機(jī)中的木馬修改DNS數(shù)據(jù)包中的應(yīng)答 網(wǎng)絡(luò)中的節(jié)點(diǎn)(如路由器)修改DNS數(shù)據(jù)包中的應(yīng)答 網(wǎng)絡(luò)中的節(jié)點(diǎn)(如運(yùn)營商)修改DNS數(shù)據(jù)包中的應(yīng)答 ......
后來,為了在客戶端對收到對DNS應(yīng)答進(jìn)行校驗(yàn),出現(xiàn)了DNSSEC技術(shù),一定程度上可以解決上面的部分問題。但限于一些方面的原因,這項(xiàng)技術(shù)并沒有大規(guī)模用起來,尤其在國內(nèi),鮮有部署應(yīng)用。
再后來,以阿里、騰訊等頭部互聯(lián)網(wǎng)廠商開始推出了httpDNS服務(wù),來了一招釜底抽薪,雖然這項(xiàng)技術(shù)的名字中還有DNS三個(gè)字母,但實(shí)現(xiàn)上和原來但DNS已經(jīng)是天差地別,通過這項(xiàng)技術(shù)讓DNS變成了在http協(xié)議之上的一個(gè)應(yīng)用服務(wù)。
6、JSON 劫持
JSON是一種輕量級的數(shù)據(jù)交換格式,而劫持就是對數(shù)據(jù)進(jìn)行竊取(或者應(yīng)該稱為打劫、攔截比較合適。惡意攻擊者通過某些特定的手段,將本應(yīng)該返回給用戶的JSON數(shù)據(jù)進(jìn)行攔截,轉(zhuǎn)而將數(shù)據(jù)發(fā)送回給惡意攻擊者,這就是JSON劫持的大概含義。一般來說進(jìn)行劫持的JSON數(shù)據(jù)都是包含敏感信息或者有價(jià)值的數(shù)據(jù)。
7、暴力破解
這個(gè)一般針對密碼而言,弱密碼(Weak Password)很容易被別人(對你很了解的人等)猜到或被破解工具暴力破解。
解決方案 密碼復(fù)雜度要足夠大,也要足夠隱蔽 限制嘗試次數(shù)
8.、HTTP 報(bào)頭追蹤漏洞
HTTP/1.1(RFC2616)規(guī)范定義了 HTTP TRACE 方法,主要是用于客戶端通過向 Web 服務(wù)器提交 TRACE 請求來進(jìn)行測試或獲得診斷信息。
當(dāng) Web 服務(wù)器啟用 TRACE 時(shí),提交的請求頭會在服務(wù)器響應(yīng)的內(nèi)容(Body)中完整的返回,其中 HTTP 頭很可能包括 Session Token、Cookies 或其它認(rèn)證信息。攻擊者可以利用此漏洞來欺騙合法用戶并得到他們的私人信息。
解決方案:
禁用 HTTP TRACE 方法。
9、信息泄露
由于 Web 服務(wù)器或應(yīng)用程序沒有正確處理一些特殊請求,泄露 Web 服務(wù)器的一些敏感信息,如用戶名、密碼、源代碼、服務(wù)器信息、配置信息等。
所以一般需注意:
應(yīng)用程序報(bào)錯(cuò)時(shí),不對外產(chǎn)生調(diào)試信息 過濾用戶提交的數(shù)據(jù)與特殊字符 保證源代碼、服務(wù)器配置的安全
10、目錄遍歷漏洞
攻擊者向 Web 服務(wù)器發(fā)送請求,通過在 URL 中或在有特殊意義的目錄中附加 ../、或者附加 ../ 的一些變形(如 .. 或 ..// 甚至其編碼),導(dǎo)致攻擊者能夠訪問未授權(quán)的目錄,以及在 Web 服務(wù)器的根目錄以外執(zhí)行命令。
11、命令執(zhí)行漏洞
命令執(zhí)行漏洞是通過 URL 發(fā)起請求,在 Web 服務(wù)器端執(zhí)行未授權(quán)的命令,獲取系統(tǒng)信息、篡改系統(tǒng)配置、控制整個(gè)系統(tǒng)、使系統(tǒng)癱瘓等。
12、文件上傳漏洞
如果對文件上傳路徑變量過濾不嚴(yán),并且對用戶上傳的文件后綴以及文件類型限制不嚴(yán),攻擊者可通過 Web 訪問的目錄上傳任意文件,包括網(wǎng)站后門文件(webshell),進(jìn)而遠(yuǎn)程控制網(wǎng)站服務(wù)器。
所以一般需注意:
在開發(fā)網(wǎng)站及應(yīng)用程序過程中,需嚴(yán)格限制和校驗(yàn)上傳的文件,禁止上傳惡意代碼的文件 限制相關(guān)目錄的執(zhí)行權(quán)限,防范 webshell 攻擊
13、其他漏洞
SSLStrip 攻擊 OpenSSL Heartbleed 安全漏洞 CCS 注入漏洞 證書有效性驗(yàn)證漏洞
14、業(yè)務(wù)漏洞
一般業(yè)務(wù)漏洞是跟具體的應(yīng)用程序相關(guān),比如參數(shù)篡改(連續(xù)編號 ID / 訂單、1 元支付)、重放攻擊(偽裝支付)、權(quán)限控制(越權(quán)操作)等。
15、框架或應(yīng)用漏洞
WordPress 4.7 / 4.7.1:REST API 內(nèi)容注入漏洞 Drupal Module RESTWS 7.x:Remote PHP Code Execution SugarCRM 6.5.23:REST PHP Object Injection Exploit Apache Struts:REST Plugin With Dynamic Method Invocation Remote Code Execution Oracle GlassFish Server:REST CSRF QQ Browser 9.6:API 權(quán)限控制問題導(dǎo)致泄露隱私模式 Hacking Docker:Registry API 未授權(quán)訪問
作者:senntyou segmentfault.com/a/1190000018004657
Node 社群 我組建了一個(gè)氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對Node.js學(xué)習(xí)感興趣的話(后續(xù)有計(jì)劃也可以),我們可以一起進(jìn)行Node.js相關(guān)的交流、學(xué)習(xí)、共建。下方加 考拉 好友回復(fù)「Node」即可。
???“分享、點(diǎn)贊、在看” 支持一波??











