【網路安全】來嘛!一起建立http服務!web必學!!!
【網路安全】來嘛!一起建立http服務!
基礎知識
物理層:定義物理裝置如何傳輸資料
資料鏈路層:在通訊的實體間建立資料鏈路連線
網路層:資料在結點之間傳輸建立邏輯鏈路
傳輸層:使用者提供可靠的端到端服務
應用層:為應用軟體提供的服務
TCP協議之上
遮蔽網路傳輸相關細節
http應用例項:
1,輸入URL開啟網頁
2,AJAX獲取資料
3, img標籤載入圖片
三次握手
user(傳送請求) —— 伺服器
伺服器(開一個介面) —— 使用者
使用者(進行連線)——伺服器
URI
定義:統一資源標誌符 包括URL 和URN
URL:統一資源定位器
http://user:pass@host.com:80/path?query=string#hash
http://使用的協議或者ftp協議
user:pass@該服務可以通過使用者名稱以及密碼證明自己的身份(一般不用)
host.com用於定位ip在網際網路中的位置獲取域名
:80為80埠
/path路由
query=string搜素的引數
#hash 用於錨點定位的工具
URN:永久統一資源定位符
HTTP報文格式
get獲取資料 put更新資料 delete:刪除資料
請求報文
GET/test/hi-there.txt HTTP/1.0
Accept:text/
Accept-language:en,fr
其中有methes的方法如GET,
test/hi-there.txt路由
HTTP/1.0協議版本
響應報文
HTTP/1.0 200 OK
Content-type:text/plain
Content-length:19
空行(head與body的區分)
HI! I am a message!
即HTTP/1.0版本 200 code的狀態 OK用明文告訴我狀態的含義
實現http服務
const http = require('http')//建立http請求服務
http.createServer(function(request,response){//request發出資訊進行封裝到request reponse則接受資訊並且封裝到~
console.log('request come',request.url)
response.end('123')
}).listen(8080)//8080埠進行監聽
console.log('server listening on 8080')//控制檯進行列印
Content-Security-Policy
作用: 限制資源獲取 報告資源獲取越權
方式: default-src限制全域性的所有和連結相關請求的範圍
制定資源型別:
connect-src:請求發向的目標
img-src:圖片從那幾個網址下面進行載入
style-src script-src:樣式指令碼從網址進行載入
font-src frame-src:網頁上與連結有關的 需要從外鏈進行載入的
CORS跨域請求限制以及解決
好處:XSS攻擊對此的防範:(內容安全策略)
1,在返回的response中加入Content-Security-Policy屬性
2,'Content-Security-Policy':'default-src http:https:'限制src必須通過http或者https進行載入
3,只能在域名下面進行載入:
'Content-Security-Policy':'default-src \'self \'
4,對錶單裡面的限制:
'Content-Security-Policy':'default-src \'self \';form-action \'self\''
若內容安全策略不理想,可以由伺服器發出一個請求進行報告
'Content-Security-Policy':'default-src \'self \';form-action \'self\';report-uri/report'
或者
<meta http-equiv='Content-Security-Policy' content ="script-src 'self ';form-action 'self'">
CORS跨域限制以及預請求驗證
預請求允許的方法:
1,post head get
2,允許Content-Type:
1,text/plain 2,multipart/form-data 3,application/x-www-form-urlencoded
3,其他限制:
請求頭的限制
XMLHttpRequestUpload物件沒有註冊任何事件監聽器
請求沒有使用ReadableStream物件
瀏覽器請求返回的一些資料會忽略掉,請求返回的標準:headers
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Headers':'X-Test-Cors'
在network進行檢視:
發生了一個預請求:Request Method:OPTIONS告訴接下來的請求的認可的
突破跨域請求的方法:
'Access-Control-Allow-Methods':'POST,PUT, Delete';
允許跨域的最大時間:
'Access-Control-MAX-age':'1000';
快取
可快取性:
public:返回的路徑 以及發出的瀏覽器,都可進行快取的操作 任何地方都可快取
private:只有發起遊覽器才能快取
no-cache:任何節點都不能快取 可在本地進行快取但經過伺服器端的驗證
到期(配置)
max-age=多少秒後快取到期
s-maxage=只在代理伺服器設定
max-stale=發起請求主動帶了一個頭,即使過期還可以用
重新驗證
must-revalidate: 過期了必須去原服務端發起請求 重新發出資料進行驗證
proxy-revalidate:快取伺服器中,必須去原服務端請求一邊
no-store:永遠都要去伺服器端拿去內容才能使用它
no-transform:不能改動返回的內容,比如壓縮啊等
瀏覽器在本地獲取快取的操作(實現本地靜態快取)
困擾:
我們希望瀏覽器去靜態快取javascript檔案css檔案,(下次開啟的時候,速度非常的快),但是又不希望後端更新了一個應用,但是客戶還是執行靜態資源
解決方案:
在js構建的時候,把打包完成的js檔名上 根據內容的雜湊結果加上一串雜湊碼,如果內容不變,則其雜湊碼不變即url不變,如果內容有變化則嵌入裡面的頁面的url有變化,則發起的請求是一個新的靜態請求而不是快取在瀏覽器裡面的靜態資源請求,可以達到快取的目的。
驗證的方法
1,last-Modified
last-Modified:
1,上次修改時間
2,配合if-modified-since 或者if-unmodified-since使用
if-modified-since(常用 瀏覽器)返回到伺服器並且代值
如果修改時間=資料中的時間 來判斷是否更新
2,Etag
資料簽名(資源對內容存在唯一的簽名,如果內容發生改變則資源發生過改變)
1,對內容進行雜湊計算,用於標記資源
2,配合if-Match或者if-Non-match使用
3,對比資源的簽名判斷是否快取
即資料簽名PK瀏覽器簽名
伺服器不需要經過快取的實際內容,只需要讀取快取
const http = require('http')
http.createServer(function(request,response){
console.log('request come',request.url)
if(request.url==='/')
const html = fs.readFileSync('sever.html','utf8')
response.writeHead(200,{
'Content-Type':'text/html'
})
response.end(html)
if(request.url ==='/script.js'){
const html = fs.readFileSync('sever.html','utf8')
response.writeHead(200,{
'Content-Type':'text/javascript',
'Cache-Control':'max-age=20000000,no-cache',
'Last-Modified':'123',
'Etag':'777'
})
const etag = requset.Headers['if-none-match']//進行讀取Etage的值
if(etag=="777"){
response.writeHead(304,{
'Content-Type':'text/javascript',
'Cache-Control':'max-age=20000000,no-cache',
'Last-Modified':'123',
'Etag':'777'
})
response.end('')
}
else{
response.writeHead(200,{
'Content-Type':'text/javascript',
'Cache-Control':'max-age=20000000,no-cache',
'Last-Modified':'123',
'Etag':'777'
})
response.end('console.log("script loaded twice")')
}
}
}).listen(8080)
console.log('server listening on 8080')
cookie
定義:定義:通過服務端返回資料後,通過cookie的head設定在瀏覽器裡面,儲存在瀏覽器裡面的內容
在同域請求當中,帶上cookie實現使用者對話傳輸的內容
1,通過Set-Cookie設定
2,下次請求會自動帶上
3,鍵值對 可以設定多個
屬性:
1, max-age和expires設定過期時間
2, Secure只在https的時候傳送
3, HTTPOnly無法通過document.cookie訪問
一首歌
有何不可
相關文章
- 現在學習網路安全來得及嗎?web安全入門學習Web
- python如何建立web服務PythonWeb
- [服務端與網路]http協議與http狀態碼服務端HTTP協議
- 網路安全工作必備技能,系統安全有網路安全工程師來守護工程師
- 網路拓撲—WEB-IIS服務搭建Web
- 零基礎學網路安全可以嗎?web安全學習路線Web
- 網路安全中,Web中介軟體/服務埠有哪些相關知識?Web
- 使用nodejs和express搭建http web服務NodeJSExpressHTTPWeb
- 第19章 建立RESTful Web服務RESTWeb
- 在Linux下使用TCP封裝器來加強網路服務安全LinuxTCP封裝
- 什麼是網路安全等保服務
- 大專學歷可以學網路安全嗎?學習web安全入門Web
- 如何提高網路安全技術?如何更好學習web安全Web
- com.sun.net.httpserver 建立 web 服務HTTPServerWeb
- web網路安全---cookie篇WebCookie
- Web網站服務(二)Web網站
- 網路安全必備常識:Web應用防火牆是什麼?Web防火牆
- Web應用防火牆是什麼?網路安全必備常識Web防火牆
- 【網路安全】你必須知道的幾個網路安全概念
- 【初學者必備】網路安全學習經驗彙總!
- 學 python 都用來幹嘛?Python
- 如何使用FastReport.Service.dll建立Web服務ASTWeb
- 《Linux網路開發必學教程》2_服務端程式設計初體驗Linux服務端程式設計
- 《Linux網路開發必學教程》5_基於多路複用的服務端Linux服務端
- 《Linux網路開發必學教程》12_TCP通訊框架:服務端設計LinuxTCP框架服務端
- 網路安全與機器學習(二):網路安全任務如何結合機器學習?機器學習
- 一起來驗證!換IP軟體真的有用嘛?
- 網路即服務(NaaS)是未來的趨勢
- 前端面試必懂的 - http 網路知識前端面試HTTP
- 網路安全需要學習哪些技能?網路安全學習
- 騰訊安全釋出安全託管服務MSS,推動網路安全建設向服務驅動轉變
- 前端必知必會HTTP請求系列(一)瞭解Web及網路基礎前端HTTPWeb
- 網際網路資訊服務安全檢查接收材料清單
- 網路安全自學能學會嗎?網路安全如何學習
- Linux系統學習(四)Linux網路服務Linux
- 跟我一起學Knative(6)--部署gRPC服務RPC
- 網際網路電視捆綁套餐服務的未來?Frontier利用YouTube TV提供影片服務
- IBM推出區塊鏈雲服務,可打造更安全網路IBM區塊鏈