前言 大家好,我是
唐唐 。金九銀十即將來臨啦,我梳理了50道
計(jì)算機(jī)網(wǎng)絡(luò) 面試題,每一道題目都特別經(jīng)典,大廠也非常喜歡問。相信大家看完,會(huì)有新的收獲滴~
1. 說說HTTP常用的狀態(tài)碼及其含義? 思路: ?這道面試題主要考察候選人,是否掌握HTTP狀態(tài)碼這個(gè)基礎(chǔ)知識(shí)點(diǎn)。
不管是不是面試需要,我們都要知道,日常開發(fā)中的這幾個(gè)狀態(tài)碼的含義哈: 2. HTTP 常用的請(qǐng)求方式,區(qū)別和用途? 思路: ?這道題主要考察候選人,是否掌握
HTTP請(qǐng)求方式 這個(gè)基礎(chǔ)知識(shí)點(diǎn),我們用得比較多就是
GET和POST 啦。
3. 請(qǐng)簡單說一下你了解的端口及對(duì)應(yīng)的服務(wù)? 4. 說下計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu) 思路: ?這道題主要考察候選人,
計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu) 這個(gè)基礎(chǔ)知識(shí)點(diǎn)。計(jì)算機(jī)網(wǎng)路體系結(jié)構(gòu)呢,有三層:ISO七層模型、TCP/IP四層模型、五層體系結(jié)構(gòu)。大家可以記住這個(gè)圖,如下
計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu) 4.1 ISO七層模型 ISO七層模型是國際標(biāo)準(zhǔn)化組織(International Organization for Standardization)制定的一個(gè)用于計(jì)算機(jī)或通信系統(tǒng)間互聯(lián)的標(biāo)準(zhǔn)體系。
★ 應(yīng)用層:網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口,常見的協(xié)議有:HTTP FTP ?SMTP SNMP DNS . 表示層:數(shù)據(jù)的表示、安全、壓縮。,確保一個(gè)系統(tǒng)的應(yīng)用層所發(fā)送的信息可以被另一個(gè)系統(tǒng)的應(yīng)用層讀取。 會(huì)話層:建立、管理、終止會(huì)話,對(duì)應(yīng)主機(jī)進(jìn)程,指本地主機(jī)與遠(yuǎn)程主機(jī)正在進(jìn)行的會(huì)話. 傳輸層:定義傳輸數(shù)據(jù)的協(xié)議端口號(hào),以及流控和差錯(cuò)校驗(yàn),協(xié)議有TCP UDP . 網(wǎng)絡(luò)層:進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇,協(xié)議有ICMP IGMP IP等 . 數(shù)據(jù)鏈路層:在物理層提供比特流服務(wù)的基礎(chǔ)上,建立相鄰結(jié)點(diǎn)之間的數(shù)據(jù)鏈路。 物理層:建立、維護(hù)、斷開物理連接。 ” 4.2 TCP/IP 四層模型 ★ 應(yīng)用層:對(duì)應(yīng)于OSI參考模型的(應(yīng)用層、表示層、會(huì)話層)。 傳輸層: 對(duì)應(yīng)OSI的傳輸層,為應(yīng)用層實(shí)體提供端到端的通信功能,保證了數(shù)據(jù)包的順序傳送及數(shù)據(jù)的完整性。 網(wǎng)際層:對(duì)應(yīng)于OSI參考模型的網(wǎng)絡(luò)層,主要解決主機(jī)到主機(jī)的通信問題。 網(wǎng)絡(luò)接口層:與OSI參考模型的數(shù)據(jù)鏈路層、物理層對(duì)應(yīng)。 ” 4.3 五層體系結(jié)構(gòu) ★ 應(yīng)用層:對(duì)應(yīng)于OSI參考模型的(應(yīng)用層、表示層、會(huì)話層)。 傳輸層:對(duì)應(yīng)OSI參考模型的的傳輸層 網(wǎng)絡(luò)層:對(duì)應(yīng)OSI參考模型的的網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層:對(duì)應(yīng)OSI參考模型的的數(shù)據(jù)鏈路層 物理層:對(duì)應(yīng)OSI參考模型的的物理層。 ” 5 如何理解HTTP協(xié)議是無狀態(tài)的 思路: ?這道題主要考察候選人,是否理解Http協(xié)議,它為什么是無狀態(tài)的呢?如何使它有狀態(tài)呢?如何理解無狀態(tài)這個(gè)詞呢?
★ 當(dāng)瀏覽器第一次發(fā)送請(qǐng)求給服務(wù)器時(shí),服務(wù)器響應(yīng)了;如果同個(gè)瀏覽器發(fā)起第二次請(qǐng)求給服務(wù)器時(shí),它還是會(huì)響應(yīng),但是呢,服務(wù)器不知道你就是剛才的那個(gè)瀏覽器。簡言之,服務(wù)器不會(huì)去記住你是誰,所以是無狀態(tài)協(xié)議。” 可以通過一個(gè)生活中的例子,來更好理解并記住它:
有狀態(tài)場(chǎng)景: 小紅:今天吃啥子? 小明:羅非魚~ 小紅:味道怎么樣呀? 小明:還不錯(cuò),好香。 無狀態(tài)的場(chǎng)景: 小紅:今天吃啥子? 小明:羅非魚~ 小紅:味道怎么樣呀? 小明:??。磕阏f啥?什么鬼?什么味道怎么樣? Http加了Cookie的話 :
小紅:今天吃啥子? 小明:羅非魚~ 小紅:你今天吃的羅非魚,味道怎么樣呀? 小明:還不錯(cuò),好香。 6.從瀏覽器地址欄輸入url到顯示主頁的過程 思路: ?這道題主要考察的知識(shí)點(diǎn)是HTTP的請(qǐng)求過程,
DNS解析,TCP三次握手,四次揮手這幾個(gè)要點(diǎn) ,我們都可以講下。
DNS解析,查找域名對(duì)應(yīng)的IP地址。 與服務(wù)器通過三次握手,建立TCP連接 向服務(wù)器發(fā)送HTTP請(qǐng)求 服務(wù)器處理請(qǐng)求,返回網(wǎng)頁內(nèi)容 瀏覽器解析并渲染頁面 TCP四次揮手,連接結(jié)束 7. 說下HTTP/1.0,1.1,2.0的區(qū)別 思路: ?這道題主要考察的知識(shí)點(diǎn)是HTTP幾個(gè)版本的區(qū)別,我們記住
HTTP/1.0 默認(rèn)是短連接,可以強(qiáng)制開啟,HTTP/1.1默認(rèn)長連接,HTTP/2.0采用
多路復(fù)用 就差不多啦。
HTTP/1.0 默認(rèn)使用短連接 ,每次請(qǐng)求都需要建立一個(gè)TCP連接。它可以設(shè)置Connection: keep-alive?這個(gè)字段,強(qiáng)制開啟長連接。 HTTP/1.1 引入了持久連接,即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用。 分塊傳輸編碼,即服務(wù)端沒產(chǎn)生一塊數(shù)據(jù),就發(fā)送一塊,用”流模式”取代”緩存模式”。 管道機(jī)制,即在同一個(gè)TCP連接里面,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求。 HTTP/2.0 二進(jìn)制協(xié)議,1.1版本的頭信息是文本(ASCII編碼),數(shù)據(jù)體可以是文本或者二進(jìn)制;2.0中,頭信息和數(shù)據(jù)體都是二進(jìn)制。 完全多路復(fù)用,在一個(gè)連接里,客戶端和瀏覽器都可以同時(shí)發(fā)送多個(gè)請(qǐng)求或回應(yīng),而且不用按照順序一一對(duì)應(yīng)。 報(bào)頭壓縮,HTTP協(xié)議不帶有狀態(tài),每次請(qǐng)求都必須附上所有信息。Http/2.0引入了頭信息壓縮機(jī)制,使用gzip或compress壓縮后再發(fā)送。 服務(wù)端推送,允許服務(wù)器未經(jīng)請(qǐng)求,主動(dòng)向客戶端發(fā)送資源。 8. ?POST和GET有哪些區(qū)別? 思路: ?這道題主要考察的知識(shí)點(diǎn)是POST和GET的區(qū)別,可以從
數(shù)據(jù)包、編碼方式、請(qǐng)求參數(shù)、收藏為書簽、歷史記錄、安全性 等幾方面去回答哈。
9. 在交互過程中如果數(shù)據(jù)傳送完了,還不想斷開連接怎么辦,怎么維持? 這個(gè)問題記住
keep-alive就好,也就是說,在HTTP中響應(yīng)體的
Connection 字段指定為
keep-alive即可
10. HTTP 如何實(shí)現(xiàn)長連接?在什么時(shí)候會(huì)超時(shí)? 思路: ?這道題實(shí)際上是考察TCP長連接的知識(shí)點(diǎn),HTTP的長連接實(shí)質(zhì)是指TCP的長連接。至于什么時(shí)候超時(shí),我們記住這幾個(gè)參數(shù)如
tcp_keepalive_time 、
tcp_keepalive_probes 就好啦
什么是HTTP的長連接? HTTP分為長連接和短連接,本質(zhì)上說的是TCP的長短連接 。TCP連接是一個(gè)雙向的通道,它是可以保持一段時(shí)間不關(guān)閉的,因此TCP連接才具有真正的長連接和短連接這一說法哈。 TCP長連接可以復(fù)用一個(gè)TCP連接,來發(fā)起多次的HTTP請(qǐng)求,這樣就可以減少資源消耗,比如一次請(qǐng)求HTML,如果是短連接的話,可能還需要請(qǐng)求后續(xù)的JS/CSS。 如何設(shè)置長連接? 通過在頭部(請(qǐng)求和響應(yīng)頭)設(shè)置
Connection 字段指定為
keep-alive,HTTP/1.0協(xié)議支持,但是是默認(rèn)關(guān)閉的,從HTTP/1.1以后,連接默認(rèn)都是長連接。
在什么時(shí)候會(huì)超時(shí)呢? ★ HTTP一般會(huì)有httpd守護(hù)進(jìn)程,里面可以設(shè)置keep-alive timeout ,當(dāng)tcp連接閑置超過這個(gè)時(shí)間就會(huì)關(guān)閉,也可以在HTTP的header里面設(shè)置超時(shí)時(shí)間 TCP 的keep-alive 包含三個(gè)參數(shù),支持在系統(tǒng)內(nèi)核的net.ipv4里面設(shè)置;當(dāng) TCP 連接之后,閑置了tcp_keepalive_time ,則會(huì)發(fā)生偵測(cè)包,如果沒有收到對(duì)方的ACK,那么會(huì)每隔 tcp_keepalive_intvl再發(fā)一次,直到發(fā)送了tcp_keepalive_probes ,就會(huì)丟棄該連接。 ” 1.?tcp_keepalive_intvl?=?15 2.?tcp_keepalive_probes?=?5 3.?tcp_keepalive_time?=?180011. HTTP 與 HTTPS 的區(qū)別。 思路: ?這道題實(shí)際上考察的知識(shí)點(diǎn)是HTTP與HTTPS的區(qū)別,這個(gè)知識(shí)點(diǎn)非常重要,可以
從安全性、數(shù)據(jù)是否加密、默認(rèn)端口 等這幾個(gè)方面去回答哈。其實(shí),當(dāng)你理解HTTPS的整個(gè)流程,就可以很好回答這個(gè)問題啦。
我的答案如下 :HTTP,即超文本傳輸協(xié)議,是一個(gè)基于TCP/IP通信協(xié)議來傳遞明文數(shù)據(jù)的協(xié)議。HTTP會(huì)存在這
幾個(gè)問題 :
請(qǐng)求信息是明文傳輸,容易被竊聽截取。 沒有驗(yàn)證對(duì)方身份,存在被冒充的風(fēng)險(xiǎn) 數(shù)據(jù)的完整性未校驗(yàn),容易被中間人篡改 為了解決Http存在的問題,Https出現(xiàn)啦。
Https是什么? HTTPS= HTTP SSL/TLS ,可以理解Https是身披SSL(Secure Socket Layer,安全套接層)的HTTP。它們主要區(qū)別如下:
12 . Https流程是怎樣的? 思路: ?這道題實(shí)際上考察的知識(shí)點(diǎn)是HTTPS的工作流程,大家需要回答這幾個(gè)要點(diǎn),
公私鑰、數(shù)字證書、加密、對(duì)稱加密、非對(duì)稱加密 。
HTTPS = HTTP SSL/TLS,也就是用SSL/TLS對(duì)數(shù)據(jù)進(jìn)行加密和解密,Http進(jìn)行傳輸。 SSL,即Secure Sockets Layer(安全套接層協(xié)議),是網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。 TLS,即Transport Layer Security(安全傳輸層協(xié)議),它是SSL3.0的后續(xù)版本。 Https工作流程 客戶端發(fā)起Https請(qǐng)求,連接到服務(wù)器的443端口。 服務(wù)器必須要有一套數(shù)字證書(證書內(nèi)容有公鑰、證書頒發(fā)機(jī)構(gòu)、失效日期等)。 服務(wù)器將自己的數(shù)字證書發(fā)送給客戶端(公鑰在證書里面,私鑰由服務(wù)器持有)。 客戶端收到數(shù)字證書之后,會(huì)驗(yàn)證證書的合法性。如果證書驗(yàn)證通過,就會(huì)生成一個(gè)隨機(jī)的對(duì)稱密鑰,用證書的公鑰加密。 客戶端將公鑰加密后的密鑰發(fā)送到服務(wù)器。 服務(wù)器接收到客戶端發(fā)來的密文密鑰之后,用自己之前保留的私鑰對(duì)其進(jìn)行非對(duì)稱解密,解密之后就得到客戶端的密鑰,然后用客戶端密鑰對(duì)返回?cái)?shù)據(jù)進(jìn)行對(duì)稱加密,醬紫傳輸?shù)臄?shù)據(jù)都是密文啦。 服務(wù)器將加密后的密文返回到客戶端。 客戶端收到后,用自己的密鑰對(duì)其進(jìn)行對(duì)稱解密,得到服務(wù)器返回的數(shù)據(jù)。 13. 說說HTTP的狀態(tài)碼,301和302的區(qū)別? 思路: ?這道題考查的知識(shí)點(diǎn),也是HTTP狀態(tài)碼,302和301都有重定向的含義,但是它們也是有區(qū)別的。
301:(永久性轉(zhuǎn)移)請(qǐng)求的網(wǎng)頁已被永久移動(dòng)到新位置。服務(wù)器返回此響應(yīng)時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置。 302:(暫時(shí)性轉(zhuǎn)移)服務(wù)器目前正從不同位置的網(wǎng)頁響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求。此代碼與響應(yīng)GET和HEAD請(qǐng)求的301代碼類似,會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到不同的位置。 網(wǎng)上有個(gè)很
形象的例子 比喻:
★ 當(dāng)一個(gè)網(wǎng)站或者網(wǎng)頁24—48小時(shí)內(nèi)臨時(shí)移動(dòng)到一個(gè)新的位置,這時(shí)候就要進(jìn)行302跳轉(zhuǎn),打個(gè)比方說,我有一套房子,但是最近走親戚去親戚家住了,過兩天我還回來的。而使用301跳轉(zhuǎn)的場(chǎng)景就是之前的網(wǎng)站因?yàn)槟撤N原因需要移除掉,然后要到新的地址訪問,是永久性的,就比如你的那套房子其實(shí)是租的,現(xiàn)在租期到了,你又在另一個(gè)地方找到了房子,之前租的房子不住了。” 14. 說說什么是數(shù)字簽名?什么是數(shù)字證書? 思路: ?這道題考查的知識(shí)點(diǎn),不僅僅是數(shù)字簽名,數(shù)字證書,很可能面試官也會(huì)問你https的原理的,因?yàn)閔ttps原理跟數(shù)字證書有關(guān)的哈,大家需要掌握https原理哦。數(shù)字證書是指在互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一個(gè)數(shù)字認(rèn)證,人們可以在網(wǎng)上用它來識(shí)別對(duì)方的身份。它的出現(xiàn),是為了避免身份被篡改冒充的。比如Https的數(shù)字證書,就是為了避免公鑰被中間人冒充篡改:
數(shù)字證書構(gòu)成 公鑰和個(gè)人等信息,經(jīng)過Hash摘要算法加密,形成消息摘要;將消息摘要拿到擁有公信力的認(rèn)證中心(CA),用它的私鑰對(duì)消息摘要加密,形成數(shù)字簽名 。 公鑰和個(gè)人信息、數(shù)字簽名共同構(gòu)成數(shù)字證書 。 15. 對(duì)稱加密與非對(duì)稱加密有什么區(qū)別 思路: ?這道題考察的知識(shí)點(diǎn)是對(duì)稱加密與非對(duì)稱加密算法,什么是對(duì)稱加密,什么是非對(duì)稱加密呢?對(duì)稱加密:指加密和解密使用同一密鑰,優(yōu)點(diǎn)是運(yùn)算速度較快,缺點(diǎn)是如何安全將密鑰傳輸給另一方。常見的對(duì)稱加密算法有:DES、AES等。
對(duì)稱加密 非對(duì)稱加密:指的是加密和解密使用不同的密鑰(即公鑰和私鑰)。公鑰與私鑰是成對(duì)存在的,如果用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有對(duì)應(yīng)的私鑰才能解密。常見的非對(duì)稱加密算法有RSA。
非對(duì)稱加密 16. 說說DNS的解析過程? 思路: ?這道題考察的知識(shí)點(diǎn)是
DNS域名解析 ,http請(qǐng)求的過程,是涉及到DNS域名解析的,這道面試題也挺經(jīng)典的,大家可以看下《圖解HTTP》那本書哈。
★ DNS,英文全稱是domain name system ,域名解析系統(tǒng),是Internet上作為域名和IP相互映射的一個(gè)分布式數(shù)據(jù)庫。它的作用很明確,就是可以根據(jù)域名查出對(duì)應(yīng)的IP地址。在瀏覽器緩存、本地DNS服務(wù)器、根域名服務(wù)器都是怎么查找的,大家回答的時(shí)候都可以說下哈。” DNS的解析過程如下圖:
DNS解析查找過程 假設(shè)你要查詢
www.baidu.com 的IP地址:
★ 首先會(huì)查找瀏覽器的緩存,看看是否能找到www.baidu.com 對(duì)應(yīng)的IP地址,找到就直接返回;否則進(jìn)行下一步。 將請(qǐng)求發(fā)往給本地DNS服務(wù)器,如果查找到也直接返回,否則繼續(xù)進(jìn)行下一步; 本地DNS服務(wù)器向根域名服務(wù)器 發(fā)送請(qǐng)求,根域名服務(wù)器返回負(fù)責(zé).com的頂級(jí)域名服務(wù)器的IP地址的列表。 本地DNS服務(wù)器再向其中一個(gè)負(fù)責(zé).com的頂級(jí)域名服務(wù)器發(fā)送一個(gè)請(qǐng)求,返回負(fù)責(zé).baidu的權(quán)威域名服務(wù)器的IP地址列表。 本地DNS服務(wù)器再向其中一個(gè)權(quán)威域名服務(wù)器發(fā)送一個(gè)請(qǐng)求,返回www.baidu.com 所對(duì)應(yīng)的IP地址。 ” 17. 什么是CSRF攻擊,如何避免 思路: ?這道題考察的知識(shí)點(diǎn)是
CSRF攻擊 ,它是屬于網(wǎng)絡(luò)安全這塊的知識(shí)點(diǎn),還有
Xss攻擊、SQL注入、DDoS 等這些常見的網(wǎng)絡(luò)攻擊,我們都需要知道攻擊的流程哈。
什么是CSRF 攻擊? ★ CSRF,跨站請(qǐng)求偽造(英文全稱是Cross-site request forgery),是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。” CSRF是如何攻擊的呢? 來看一個(gè)來自百度百科的例子哈:
Tom 登陸銀行,沒有退出,瀏覽器包含了Tom在銀行的身份認(rèn)證信息。 黑客Jerry將偽造的轉(zhuǎn)賬請(qǐng)求,包含在在帖子 Tom在銀行網(wǎng)站保持登陸的情況下,瀏覽帖子 將偽造的轉(zhuǎn)賬請(qǐng)求連同身份認(rèn)證信息,發(fā)送到銀行網(wǎng)站 銀行網(wǎng)站看到身份認(rèn)證信息,以為就是Tom的合法操作,最后造成Tom資金損失。 怎么解決CSRF攻擊呢? 檢查Referer字段。 添加校驗(yàn)token。 18. 聊聊五層計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)中,每一層對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議有哪些? 為了大家方便記憶,我還是畫個(gè)思維導(dǎo)圖吧,如下:
19. 說說 WebSocket與socket的區(qū)別 思路: ?這是一個(gè)比較基礎(chǔ)的知識(shí)點(diǎn),經(jīng)常有小伙伴會(huì)搞混。
Socket其實(shí)就是等于IP地址 端口 協(xié)議 。 ★ 具體來說,Socket是一套標(biāo)準(zhǔn),它完成了對(duì)TCP/IP的高度封裝,屏蔽網(wǎng)絡(luò)細(xì)節(jié),以方便開發(fā)者更好地進(jìn)行網(wǎng)絡(luò)編程。” WebSocket是一個(gè)持久化的協(xié)議,它是伴隨H5而出的協(xié)議,用來解決http不支持持久化連接 的問題。 Socket一個(gè)是網(wǎng)編編程的標(biāo)準(zhǔn)接口 ,而WebSocket則是應(yīng)用層通信協(xié)議。 20. 什么是DoS、DDoS、DRDoS攻擊? 思路: ?這是涉及網(wǎng)絡(luò)安全的一個(gè)知識(shí)點(diǎn),DDos還會(huì)挺常見的,如SYN Flood。
★ DOS : (Denial of Service),翻譯過來就是拒絕服務(wù),一切能引起DOS行為的攻擊都被稱為DOS攻擊。最常見的DoS攻擊就有計(jì)算機(jī)網(wǎng)絡(luò) 寬帶攻擊 、連通性攻擊 。DDoS : (Distributed Denial of Service),翻譯過來是分布式拒絕服務(wù)。是指處于不同位置的多個(gè)攻擊者同時(shí)向一個(gè)或幾個(gè)目標(biāo)發(fā)動(dòng)攻擊,或者一個(gè)攻擊者控制了位于不同位置的多臺(tái)機(jī)器并利用這些機(jī)器對(duì)受害者同時(shí)實(shí)施攻擊。常見的DDos有SYN Flood、Ping of Death、ACK Flood、UDP Flood 等。DRDoS : (Distributed Reflection Denial of Service),中文是分布式反射拒絕服務(wù),該方式靠的是發(fā)送大量帶有被害者IP地址的數(shù)據(jù)包給攻擊主機(jī),然后攻擊主機(jī)對(duì)IP地址源做出大量回應(yīng),從而形成拒絕服務(wù)攻擊。” 21. 什么是XSS攻擊,如何避免? 思路: ?XSS攻擊也是比較常見,XSS,叫
跨站腳本攻擊(Cross-Site Scripting) ,因?yàn)闀?huì)與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,因此有人將跨站腳本攻擊縮寫為XSS。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的。XSS攻擊一般分三種類型:
存儲(chǔ)型 、反射型 、DOM型XSS 21.1 XSS是如何攻擊的呢? 拿反射型舉個(gè)例子吧,流程圖如下:
21.2 如何解決XSS攻擊問題? 對(duì)輸入進(jìn)行過濾,過濾標(biāo)簽等,只允許合法值。 HTML轉(zhuǎn)義 對(duì)于鏈接跳轉(zhuǎn),如?等,要校驗(yàn)內(nèi)容,禁止以script開頭的非法鏈接。 限制輸入長度 22. Http請(qǐng)求的過程與原理 思路: ?HTTP請(qǐng)求,一個(gè)非常非?;A(chǔ)的知識(shí)點(diǎn),一定需要掌握的。其實(shí)覺得跟瀏覽器地址欄輸入url到顯示主頁這道題有點(diǎn)類似。
我的答案如下 :HTTP是一個(gè)基于TCP/IP協(xié)議來傳遞數(shù)據(jù)的超文本傳輸協(xié)議,傳輸?shù)臄?shù)據(jù)類型有HTML,圖片等。以訪問百度有例子,看下一次Http的請(qǐng)求過程吧
Http請(qǐng)求過程 客戶端進(jìn)行DNS域名解析,得到對(duì)應(yīng)的IP地址 根據(jù)這個(gè)IP,找到對(duì)應(yīng)的服務(wù)器建立連接(三次握手) 建立TCP連接后發(fā)起HTTP請(qǐng)求(一個(gè)完整的http請(qǐng)求報(bào)文) 服務(wù)器響應(yīng)HTTP請(qǐng)求,客戶端得到html代碼 客戶端解析html代碼,用html代碼中的資源(如js,css,圖片等等)渲染頁面。 服務(wù)器關(guān)閉TCP連接(四次揮手) 23. ?forward和redirect的區(qū)別? 思路: ?這道題有點(diǎn)偏Java web方向的。以前記得剛出來實(shí)習(xí)找工作的時(shí)候,面試官可喜歡問這道題啦,當(dāng)時(shí)我記的答案就是,forward是轉(zhuǎn)發(fā),redirect是重定向。
我的答案如下 :
★ 直接轉(zhuǎn)發(fā)方式(Forward) ?,客戶端和瀏覽器只發(fā)出一次請(qǐng)求,Servlet、HTML、JSP或其它信息資源,由第二個(gè)信息資源響應(yīng)該請(qǐng)求,在請(qǐng)求對(duì)象request中,保存的對(duì)象對(duì)于每個(gè)信息資源是共享的。間接轉(zhuǎn)發(fā)方式(Redirect) ?實(shí)際是兩次HTTP請(qǐng)求,服務(wù)器端在響應(yīng)第一次請(qǐng)求的時(shí)候,讓瀏覽器再向另外一個(gè)URL發(fā)出請(qǐng)求,從而達(dá)到轉(zhuǎn)發(fā)的目的。” 舉個(gè)通俗的例子:
★ 直接轉(zhuǎn)發(fā)就相當(dāng)于:“A找B借錢,B說沒有,B去找C借,借到借不到都會(huì)把消息傳遞給A”; 間接轉(zhuǎn)發(fā)就相當(dāng)于:"A找B借錢,B說沒有,讓A去找C借"。** ” 看下這兩個(gè)圖,可以更容易理解一些:
24. 聊聊SQL注入? 思路: ?SQL注入是最經(jīng)典的安全問題。無論你是前端開發(fā)還是后端開發(fā),都必須掌握的。
★ SQL注入是一種代碼注入技術(shù),一般被應(yīng)用于攻擊web應(yīng)用程序。它通過在web應(yīng)用接口傳入一些特殊參數(shù)字符,來欺騙應(yīng)用服務(wù)器,執(zhí)行惡意的SQL命令,以達(dá)到非法獲取系統(tǒng)信息的目的。它目前是黑客對(duì)數(shù)據(jù)庫進(jìn)行攻擊的最常用手段之一。” 24.1 SQL注入是如何攻擊的? 舉個(gè)常見的
業(yè)務(wù)場(chǎng)景 :在web表單搜索框輸入員工名字,然后后臺(tái)查詢出對(duì)應(yīng)名字的員工。
這種場(chǎng)景下,一般都是前端頁面,把一個(gè)名字參數(shù)name傳到后臺(tái),然后后臺(tái)通過SQL把結(jié)果查詢出來
name?=?"田螺" ;?//前端傳過來的 SQL=?"select?*?from?staff?where?name=" ? ?name;??//根據(jù)前端傳過來的name參數(shù),查詢數(shù)據(jù)庫員工表staff因?yàn)镾QL是直接拼接的,如果我們完全信任前端傳的參數(shù)的話。假如前端傳這么一個(gè)參數(shù)時(shí)
'' or '1'='1',SQL就變成醬紫的啦。
select?*?from?staff?where ?name='' ?or?'1' ='1' ;這個(gè)SQL會(huì)把所有的員工信息全都查出來了,醬紫就請(qǐng)求用戶已經(jīng)越權(quán)啦。請(qǐng)求者可以獲取所有員工的信息,信息已經(jīng)暴露了啦。
24.2 如何預(yù)防SQL注入問題 1). 使用#{}而不是 ${} 在MyBatis中,使用
#{}而不是
${},可以很大程度防止sql注入。
因?yàn)?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;border-radius: 4px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">#{}是一個(gè)參數(shù)占位符,對(duì)于字符串類型,會(huì)自動(dòng)加上"",其他類型不加。由于Mybatis采用預(yù)編譯 ,其后的參數(shù)不會(huì)再進(jìn)行SQL編譯,所以一定程度上防止SQL注入。 ${}是一個(gè)簡單的字符串替換,字符串是什么,就會(huì)解析成什么,存在SQL注入風(fēng)險(xiǎn)2). 不要暴露一些不必要的日志或者安全信息,比如避免直接響應(yīng)一些sql異常信息。 如果SQL發(fā)生異常了,不要把這些信息暴露響應(yīng)給用戶,可以自定義異常進(jìn)行響應(yīng)
3). 不相信任何外部輸入?yún)?shù),過濾參數(shù)中含有的一些數(shù)據(jù)庫關(guān)鍵詞關(guān)鍵詞 可以加個(gè)參數(shù)校驗(yàn)過濾的方法,過濾
union,or等數(shù)據(jù)庫關(guān)鍵詞
4). 適當(dāng)?shù)臋?quán)限控制 在你查詢信息時(shí),先校驗(yàn)下當(dāng)前用戶是否有這個(gè)權(quán)限。比如說,實(shí)現(xiàn)代碼的時(shí)候,可以讓用戶多傳一個(gè)企業(yè)Id什么的,或者獲取當(dāng)前用戶的session信息等,在查詢前,先校驗(yàn)一下當(dāng)前用戶是否是這個(gè)企業(yè)下的等等,是的話才有這個(gè)查詢員工的權(quán)限。
25. Session和Cookie的區(qū)別。 我們先來看Session和Cookie的概念吧: Cookie是保存在客戶端的一小塊文本串的數(shù)據(jù)??蛻舳讼蚍?wù)器發(fā)起請(qǐng)求時(shí),服務(wù)端會(huì)向客戶端發(fā)送一個(gè)Cookie,客戶端就把Cookie保存起來。在客戶端下次向同一服務(wù)器再發(fā)起請(qǐng)求時(shí),Cookie被攜帶發(fā)送到服務(wù)器。服務(wù)器就是根據(jù)這個(gè)Cookie來確認(rèn)身份的。 session指的就是服務(wù)器和客戶端一次會(huì)話的過程。Session利用Cookie進(jìn)行信息處理的,當(dāng)用戶首先進(jìn)行了請(qǐng)求后,服務(wù)端就在用戶瀏覽器上創(chuàng)建了一個(gè)Cookie,當(dāng)這個(gè)Session結(jié)束時(shí),其實(shí)就是意味著這個(gè)Cookie就過期了。Session對(duì)象存儲(chǔ)著特定用戶會(huì)話所需的屬性及配置信息。 Session 和Cookie的區(qū)別主要有這些: 來看個(gè)圖吧:
★ 用戶第一次請(qǐng)求服務(wù)器時(shí),服務(wù)器根據(jù)用戶提交的信息,創(chuàng)建對(duì)應(yīng)的Session,請(qǐng)求返回時(shí)將此Session的唯一標(biāo)識(shí)信息SessionID返回給瀏覽器,瀏覽器接收到服務(wù)器返回的SessionID信息后,會(huì)將此信息存入Cookie中,同時(shí)Cookie記錄此SessionID是屬于哪個(gè)域名。 當(dāng)用戶第二次訪問服務(wù)器時(shí),請(qǐng)求會(huì)自動(dòng)判斷此域名下是否存在Cookie信息,如果存在,則自動(dòng)將Cookie信息也發(fā)送給服務(wù)端,服務(wù)端會(huì)從Cookie中獲取SessionID,再根據(jù) SessionID查找對(duì)應(yīng)的 Session信息,如果沒有找到,說明用戶沒有登錄或者登錄失效,如果找到Session證明用戶已經(jīng)登錄可執(zhí)行后面操作。 ” 26. IP地址有哪些分類? 一般可以這么認(rèn)為,IP地址=網(wǎng)絡(luò)號(hào) 主機(jī)號(hào)。
網(wǎng)絡(luò)號(hào):它標(biāo)志主機(jī)所連接的網(wǎng)絡(luò)地址表示屬于互聯(lián)網(wǎng)的哪一個(gè)網(wǎng)絡(luò)。 主機(jī)號(hào):它標(biāo)志主機(jī)地址表示其屬于該網(wǎng)絡(luò)中的哪一臺(tái)主機(jī)。 IP地址分為A,B,C,D,E五大類:
A類地址(1~126):以0開頭,網(wǎng)絡(luò)號(hào)占前8位,主機(jī)號(hào)占后面24位。 B類地址(128~191):以10開頭,網(wǎng)絡(luò)號(hào)占前16位,主機(jī)號(hào)占后面16位。 C類地址(192~223):以110開頭,網(wǎng)絡(luò)號(hào)占前24位,主機(jī)號(hào)占后面8位。 D類地址(224~239):以1110開頭,保留位多播地址。 E類地址(240~255):以11110開頭,保留位為將來使用 IP地址分類 27. 說下ARP 協(xié)議的工作過程? ARP 協(xié)議協(xié)議,
Address Resolution Protocol ,地址解析協(xié)議,它是用于實(shí)現(xiàn)IP地址到MAC地址的映射。
★ 首先,每臺(tái)主機(jī)都會(huì)在自己的ARP緩沖區(qū)中建立一個(gè)ARP列表,以表示IP地址和MAC地址的對(duì)應(yīng)關(guān)系。 當(dāng)源主機(jī)需要將一個(gè)數(shù)據(jù)包要發(fā)送到目的主機(jī)時(shí),會(huì)首先檢查自己的ARP列表,是否存在該IP地址對(duì)應(yīng)的MAC地址;如果有﹐就直接將數(shù)據(jù)包發(fā)送到這個(gè)MAC地址;如果沒有,就向本地網(wǎng)段發(fā)起一個(gè)ARP請(qǐng)求的廣播包,查詢此目的主機(jī)對(duì)應(yīng)的MAC地址。此ARP請(qǐng)求的數(shù)據(jù)包里,包括源主機(jī)的IP地址、硬件地址、以及目的主機(jī)的IP地址。 網(wǎng)絡(luò)中所有的主機(jī)收到這個(gè)ARP請(qǐng)求后,會(huì)檢查數(shù)據(jù)包中的目的IP是否和自己的IP地址一致。如果不相同,就會(huì)忽略此數(shù)據(jù)包;如果相同,該主機(jī)首先將發(fā)送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經(jīng)存在該IP的信息,則將其覆蓋,然后給源主機(jī)發(fā)送一個(gè) ARP響應(yīng)數(shù)據(jù)包,告訴對(duì)方自己是它需要查找的MAC地址。 源主機(jī)收到這個(gè)ARP響應(yīng)數(shù)據(jù)包后,將得到的目的主機(jī)的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息開始數(shù)據(jù)的傳輸。如果源主機(jī)一直沒有收到ARP響應(yīng)數(shù)據(jù)包,表示ARP查詢失敗。 ” 28. 有了IP地址,為什么還要用MAC地址? ★ 簡而言之,標(biāo)識(shí)網(wǎng)絡(luò)中的一臺(tái)計(jì)算機(jī),比較常用的就是IP地址和MAC地址 ,但計(jì)算機(jī)的IP地址可由用戶自行更改,管理起來就相對(duì)困難,而MAC地址不可更改,所以一般會(huì)把IP地址和MAC地址組合起來使用。 那只使用MAC地址不用IP地址行不行呢?不行的!因?yàn)樽钤缇褪荕AC地址先出現(xiàn)的,并且當(dāng)時(shí)并不用IP地址,只用MAC地址,后來隨著網(wǎng)絡(luò)中的設(shè)備越來越多,整個(gè)路由過程越來越復(fù)雜,便出現(xiàn)了子網(wǎng)的概念。對(duì)于目的地址在其他子網(wǎng)的數(shù)據(jù)包,路由只需要將數(shù)據(jù)包送到那個(gè)子網(wǎng)即可。 那為什么要用IP地址呢?是因?yàn)镮P地址是和地域相關(guān)的,對(duì)于同一個(gè)子網(wǎng)上的設(shè)備,IP地址的前綴都是一樣的,這樣路由器通過IP地址的前綴就知道設(shè)備在在哪個(gè)子網(wǎng)上了,而只用MAC地址的話,路由器則需要記住每個(gè)MAC地址在哪個(gè)子網(wǎng),這需要路由器有極大的存儲(chǔ)空間,是無法實(shí)現(xiàn)的。 IP地址可以比作為地址,MAC地址為收件人,在一次通信過程中,兩者是缺一不可的。 ” 29. TCP 和 UDP 分別對(duì)應(yīng)的常見應(yīng)用層協(xié)議有哪些? 基于TCP的應(yīng)用層協(xié)議有:HTTP、FTP、SMTP、TELNET、SSH HTTP :HyperText Transfer Protocol(超文本傳輸協(xié)議),默認(rèn)端口80FTP : File Transfer Protocol (文件傳輸協(xié)議), 默認(rèn)端口(20用于傳輸數(shù)據(jù),21用于傳輸控制信息)SMTP : Simple Mail Transfer Protocol (簡單郵件傳輸協(xié)議) ,默認(rèn)端口25TELNET : Teletype over the Network (網(wǎng)絡(luò)電傳), 默認(rèn)端口23SSH :Secure Shell(安全外殼協(xié)議),默認(rèn)端口 22基于UDP的應(yīng)用層協(xié)議:DNS、TFTP、SNMP DNS ?: Domain Name Service (域名服務(wù)),默認(rèn)端口 53TFTP : Trivial File Transfer Protocol (簡單文件傳輸協(xié)議),默認(rèn)端口69SNMP :Simple Network Management Protocol(簡單網(wǎng)絡(luò)管理協(xié)議),通過UDP端口161接收,只有Trap信息采用UDP端口162。30. 聊聊?;钣?jì)時(shí)器的作用 除時(shí)間等待計(jì)時(shí)器外,TCP 還有一個(gè)?;钣?jì)時(shí)器(keepalive timer)。設(shè)想這樣的場(chǎng)景:客戶已主動(dòng)與服務(wù)器建立了TCP連接。但后來客戶端的主機(jī)突然發(fā)生故障。顯然,服務(wù)器以后就不能再收到客戶端發(fā)來的數(shù)據(jù)。因此,應(yīng)當(dāng)有措施使服務(wù)器不要再白白等待下去。這就需要使用保活計(jì)時(shí)器了。服務(wù)器每收到一次客戶的數(shù)據(jù),就重新設(shè)置?;钣?jì)時(shí)器,時(shí)間的設(shè)置通常是兩個(gè)小時(shí)。若兩個(gè)小時(shí)都沒有收到客戶端的數(shù)據(jù),服務(wù)端就發(fā)送一個(gè)探測(cè)報(bào)文段,以后則每隔 75秒鐘發(fā)送一次。若連續(xù)發(fā)送10個(gè)探測(cè)報(bào)文段后仍然無客戶端的響應(yīng),服務(wù)端就認(rèn)為客戶端出了故障,接著就關(guān)閉這個(gè)連接。
31. 如果服務(wù)器出現(xiàn)了大量CLOSE_WAIT狀態(tài)如何解決。 我們先來復(fù)習(xí)下TCP的四次揮手
服務(wù)器端收到客戶端發(fā)送的FIN后,TCP協(xié)議棧就會(huì)自動(dòng)發(fā)送ACK,接著進(jìn)入CLOSE_WAIT 狀態(tài)。 但是如果服務(wù)器端不執(zhí)行socket的close()操作,那么就沒法進(jìn)入LAST_ACK,導(dǎo)致大量連接處于CLOSE_WAIT狀態(tài) 所以,如果服務(wù)器出現(xiàn)了大量CLOSE_WAIT 狀態(tài),一般是程序Bug,或者關(guān)閉socket不及時(shí)。 32. URI和URL的區(qū)別 URI,全稱是Uniform Resource Identifier),中文翻譯是統(tǒng)一資源標(biāo)志符,主要作用是唯一標(biāo)識(shí)一個(gè)資源。 URL,全稱是Uniform Resource Location),中文翻譯是統(tǒng)一資源定位符,主要作用是提供資源的路徑。打個(gè)經(jīng)典比喻吧,URI像是身份證,可以唯一標(biāo)識(shí)一個(gè)人,而URL更像一個(gè)住址,可以通過URL找到這個(gè)人。 33. ICMP協(xié)議的功能 ICMP,Internet Control Message Protocol ,Internet控制消息協(xié)議。
ICMP協(xié)議是一種面向無連接的協(xié)議,用于傳輸出錯(cuò)報(bào)告控制信息。 它是一個(gè)非常重要的協(xié)議,它對(duì)于網(wǎng)絡(luò)安全具有極其重要的意義。它屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機(jī)與路由器之間傳遞控制信息,包括報(bào)告錯(cuò)誤、交換受限控制和狀態(tài)信息 等。 當(dāng)遇到IP數(shù)據(jù)無法訪問目標(biāo)、IP路由器無法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時(shí),會(huì)自動(dòng)發(fā)送ICMP消息。 比如我們?nèi)粘J褂玫帽容^多的
ping ,就是基于ICMP的。
35. 說下ping的原理 ★ ping,Packet Internet Groper ,是一種因特網(wǎng)包探索器,用于測(cè)試網(wǎng)絡(luò)連接量的程序。Ping是工作在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)中應(yīng)用層的一個(gè)服務(wù)命令, 主要是向特定的目的主機(jī)發(fā)送ICMP(Internet Control Message Protocol 因特網(wǎng)報(bào)文控制協(xié)議)?請(qǐng)求報(bào)文,測(cè)試目的站是否可達(dá)及了解其有關(guān)狀態(tài)” 一般來說,ping可以用來檢測(cè)網(wǎng)絡(luò)通不通。它是基于
ICMP協(xié)議工作的。假設(shè)
機(jī)器A ?ping
機(jī)器B ,工作過程如下:
ping通知系統(tǒng),新建一個(gè)固定格式的ICMP請(qǐng)求數(shù)據(jù)包 ICMP協(xié)議,將該數(shù)據(jù)包和目標(biāo)機(jī)器B的IP地址打包,一起轉(zhuǎn)交給IP協(xié)議層 IP層協(xié)議將本機(jī)IP地址為源地址,機(jī)器B的IP地址為目標(biāo)地址,加上一些其他的控制信息,構(gòu)建一個(gè)IP數(shù)據(jù)包 先獲取目標(biāo)機(jī)器B的MAC地址。 數(shù)據(jù)鏈路層構(gòu)建一個(gè)數(shù)據(jù)幀,目的地址是IP層傳過來的MAC地址 ,源地址是本機(jī)的MAC地址 機(jī)器B收到后,對(duì)比目標(biāo)地址,和自己本機(jī)的MAC地址是否一致,符合就處理返回,不符合就丟棄。 根據(jù)目的主機(jī)返回的ICMP回送回答報(bào)文中的時(shí)間戳,從而計(jì)算出往返時(shí)間 最終顯示結(jié)果有這幾項(xiàng):發(fā)送到目的主機(jī)的IP地址、發(fā)送