主頁 >  其他 > 【逐點突破系列】 深入跨域,理論和實踐都不能少

【逐點突破系列】 深入跨域,理論和實踐都不能少

2021-04-20 10:45:21 其他

前言

從“跨域”這個詞開始,去理清跨域這個知識點,途徑同源策略,跨過document.domain,window.postMessage,JSONP,CORS等,先放若干個問題,希望看完文章的你可以答上來,

  1. 能說說跨域嗎?
  2. 能說說同源策略嗎?
  3. 為什么要同源策略,它限制了什么?
  4. 你知道哪些跨域方案呢?
  5. 有關cookie的跨域怎么實作?
  6. 能具體說說JSONP嗎?回傳什么資料呢,前端怎么處理呢?知道什么原理嗎?實作過嗎?JSONP服務器端實作過嗎?
  7. postMessage 了解嗎?怎么使用?需要注意什么?(安全方面)
  8. 代理了解過嗎?用過哪些代理方案呢不?怎么在專案中用呢?
  9. cors可以具體說一個簡單請求和非簡單請求嗎?具體程序說一下?專案中怎么使用?

文章可能有些地方寫的不當和不全的地方,歡迎評論區給我建議,感謝~~ 🤞🤞🤞

也希望里面的知識點有哪里不清楚的,你可以自己可以花時間去整明白更好,加油呀😊

這次就不放導圖啦,右邊目錄很清楚~~

1、講一下跨域是什么?

一個源加載的檔案或者腳本和來自另一個源的檔案和腳本等資源進行互動(也就是不滿足同源策略的兩個源之間進行一些互動),就是跨域,

所以你需要清楚的是同源策略是什么?它為什么出現?它又限制了什么? 往下看吧:

2、同源策略

2.1、 同源策略是什么?

所謂"同源"指的是"三個相同",

  • 協議相同
  • 域名相同
  • 埠相同

舉個栗子:

http://www.jingda.com/dir/page.html這個網址,協議是http://,域名是www.jingda.com,埠是80(默認埠可以省略),來看看下面改編的哪些是同源哪些是不同源:

  • http://www.jingda.com/dir2/other.html:同源
  • http://jingda1.com/dir/other.html:不同源(域名不同)
  • http://v2.www.jingda.com/dir/other.html:不同源(域名不同)
  • http://www.jingda.com:81/dir/other.html:不同源(埠不同)
  • https://www.jingda.com/dir/page.html:不同源(協議不同)

2.2、 為什么需要同源策略?

同源政策的目的,是為了保證用戶資訊的安全,防止惡意的網站竊取資料,它能幫助阻隔惡意檔案,減少可能被攻擊的媒介, 假設小明同學在A銀行的官網進行了登錄,之后他又去瀏覽了其他網站,如果其他網站可以讀取A銀行官網的cookie,那么小明在A銀行的登錄資訊和其他存款記錄等都會被泄露,將是一件非常危險的情況,

而cookie的訪問限制只是同源策略限制的一種情況,下面我們介紹一下其他的,

2.3、 同源策略帶來了什么訪問限制?

  • 跨源資料存盤訪問:訪問存盤在瀏覽器中的資料,如 localStorage 和 IndexedDB,是以源進行分割;Cookies 使用不同的源定義方式,每個源都擁有自己單獨的存盤空間,一個源中的 JavaScript 腳本不能對屬于其它源的資料進行讀寫操作,

  • 跨源腳本API訪問:JavaScript 的 API 中,如 iframe.contentWindow、 window.parent、window.open 和 window.opener 允許檔案間直接相互參考,當兩個檔案的源不同時,這些參考方式將對 Window 和 Location物件的訪問添加限制,

  • 跨源網路訪問:同源策略控制不同源之間的互動,例如在使用XMLHttpRequest 或 [圖片上傳中…(image-d026b6-1618640180825-0)]

    標簽時則會受到同源策略的約束,

3、解決跨域的幾種方法?

將上面三種訪問限制簡化成下面的三種表達:

(1) Cookie、LocalStorage 和 IndexDB 無法讀取,

(2) JavaScript 的 API 中的一些參考,無法獲得,(詳見上)

(3) AJAX 請求不能發送,(也就是無法使用XMLHttpRequest)

(因為在網上有關跨域的解決方案,可能是比較多,但這里我是根據上面三種限制依次介紹一下可能行得通的解決方案)

3.1、 cookie – document.domain

當我們嘗試解決因同源策略下,無法訪問cookie這種情況時,我們可以借助:

  • 1、瀏覽器允許通過設定document.domain共享 Cookie,來達成效果,但是,兩個網頁一級域名相同,只是二級域名不同才可以設定,那什么是一級域名,什么是二級域名呢?

舉個栗子: A網頁:http://w1.jingda.com/a.html 在這個網頁地址中,w1.jingda.com這部分統稱為域名,

  • 一級域名是由一個合法的字串+域名后綴組成,所以,jingda.com這種形式的域名才是一級域名,jingda是域名主體,.com、.net也是域名后綴,
  • 二級域名實際就是一級域名下面的主機名,顧名思義,它是在一級域名前面加上一個字串,比如w1.jingda.com,

解釋完怎樣的情況可以設定document.domain共享 Cookie,讓我們看看一個如何操作:

假設有兩個網頁地址,我們可以看到,他們的一級域名是相同的,二級域名的不同的:

A網頁:http://w1.jingda.com/a.html

B網頁:http://w2.jingda.com/b.html

那么只要設定相同的document.domain,兩個網頁就可以共享Cookie,

document.domain = 'example.com';
復制代碼

A網頁通過腳本設定一個 Cookie,

document.cookie = "test1=hello";
復制代碼

B網頁就可以讀到這個 Cookie,

var allCookie = document.cookie;
復制代碼

2、服務器也可以在設定Cookie的時候,指定Cookie的所屬域名為一級域名,比如.example.com,

Set-Cookie: key=value; domain=.example.com; path=/
復制代碼

這樣的話,二級域名和三級域名不用做任何設定,都可以讀取這個Cookie,

這里的話,補充一下設定cookie的時候,一些其他的設定來限定其可訪問性:

  1. Domain 和 Path 標識定義了Cookie的作用域:即允許 Cookie 應該發送給哪些URL,
  2. Secure:Secure屬性是說如果一個cookie被設定了Secure=true,那么這個cookie只能用https協議發送給服務器,用http協議是不發送的,
  3. HttpOnly :使用 HttpOnly 屬性可防止通過 JavaScript 訪問 cookie 值
  4. SameSite Cookie 允許服務器要求某個 cookie 在跨站請求時不會被發送,從而可以阻止跨站請求偽造攻擊(CSRF),

你應該注意到,這里我們只是單單解決了在有一些限制條件下的訪問cookie的限制,但是上面還提到的LocalStorage 和 IndexDB暫時還沒有解決,(等下再說)

3.2、 API訪問 – window.postMessage

postMessage是html5新增的一個解決跨域的一個方法,為了能讓不同源中檔案進行交流,可以使用 window.postMessage安全地實作跨源通信,(安全是指在正確的使用情況下),這

3.2.1、window.postMessage的使用場景?

這個我自己也是沒有用過的,使用方法大家可以參考這篇window.postMessage用法一個比較小的案例

因為是兩個視窗頁面之間的通信,因此我們這邊假設我兩個頁面,A,B,目的是在B視窗中點擊postMessage按鈕,能夠在A頁面收到發來的訊息, A頁面:

<script>
  function test() {
    let op = window.open('b.html', '_blank'); 
    function receiveMessage(event) {
      console.log('event', event);
    }
    op.addEventListener("message", receiveMessage, false); 
  }
</script>
<body>
  <div>
    <button onClick="test()">open</button>
  </div>
</body>
復制代碼

B頁面:

<script>
  function post() {
    window.postMessage("hi there!", location.origin);
  }
  function receiveMessage(event) {
    console.log('event', event)
  }
  window.addEventListener("message", receiveMessage, false);
</script>
<body>
  <div>
    <button onClick="post()">postMessage</button>
  </div>
</body>
復制代碼

我就直接說一下大概的思路了: 首先看看B頁面:

  1. 在B頁面有一個按鈕,點擊這個按鈕會觸發一個方法,post()
  2. 在post()方法中,window.postMessage(“hi there!”, location.origin),發送到所有同源的視窗,注意,當前視窗也會收到
  3. 之后通過 window.addEventListener(“message”, receiveMessage, false)去監聽,如果有資料,就執行receiveMessage(),把資料列印出來

再來看A頁面:

  1. 在A頁面也有一個按鈕,當點擊這個按鈕時觸發test()
  2. 打開新視窗,并建立視窗的參考變數op = window.open(‘B.html’, ‘_blank’);
  3. op.addEventListener(“message”, receiveMessage, false); 監聽新開視窗發來的訊息,通過 receiveMessage() 把資料列印出來

3.2.2、如何正確的使用,以保證安全性?

  1. 始終使用origin和source屬性驗證發件人的身份,沒有驗證origin和source屬性會導致跨站點腳本攻擊,
  2. 當使用postMessage將資料發送到其他視窗時,指定精確的目標origin,而不是*

3.3、JSONP

JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域資料訪問的問題,

3.3.1、JSONP的介紹

JSONP 是通過在<script></srcipt>標簽里,通過src,img,href 屬性的跨域方式向一個不同源的網站地址發送http請求,并且使得json資料可以在javascript代碼中能夠使用,

它規避了javascript代碼中的跨源網路訪問,也就是無法使用XMLHttpRequest,fetch被同源機制管到了(如果不同源的話),

提前準備一個介面:https://photo.sina.cn/aj/index?page=1&cate=recommend 直接網頁中打開,我們是可以看到有很多資料的,如下圖:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VOqT1VMJ-1618820609526)(https://upload-images.jianshu.io/upload_images/23129380-7f4e1aed616cbfa6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

讓我們嘗試在本地請求一下這個地址,看看能不能拿到資料:因為雙方地址并不是同源的,因此這樣請求會報跨域的錯:

<body>
   <script>
        fetch('https://photo.sina.cn/aj/index?page=1&cate=recommend')
            .then(data=>{
                console.log(data);

            })
    </script>
</body>
復制代碼

通過 live-server打開瀏覽器,在控制臺可以看到報錯了,因為這個是一個跨域的請求:

接下來我們來看看JSONP如何解決這個問題:

3.3.2、jsonp 如何使用?原理是什么?回傳資料格式?前端怎么處理?

還是請求上面的這個網站地址,我們把代碼改成下面這樣:

<body>
  <script>
    function callback(data){
        console.log(data);
    }
</script>
<script src="https://photo.sina.cn/aj/index?page=1&cate=recommend&callback=callback"></script>  
</body>
復制代碼

再來看看頁面控制臺輸出:

data成功取到了,但是我們的資料到達之后是json資料,不能直接使用,script標簽是一個加載資源的標簽,它并不能直接運行這個代碼,

事實上我們是在訪問的時候,在請求的地址后面加上一個,&callback=callback,通知服務器,本地想進行一個跨資源訪問(以JSOP的形式進行跨域),等號后面的callback是一個你自己定義的函式,名字可自取,這個函式就是,通知我需要請求的地址,這邊頁面上我有一個函式,它會等待呼叫,用來執行你發過來的資料(也就是可以去執行把資料請求下來的操作),

因此在資料到達之后,還包了一層函式 callback({data}),當資料通過script標簽請求下來之后,再通過callback實作了一個呼叫本地資源的能力,

最后再理一下這部分的內容:

  • JSONP的原理

script標簽請求資料,在請求的地址后面加上一個,&callback=callback,請求的服務器就在json資料外面包一層callback函式,當這個帶有資料的callback函式可以在script得到之后可以運行的函式:

  • 回傳的資料格式

JSON

  • 以及前端如何處理的

JSON with padding — callback({data})

3.3.3、自己封裝一個jsonp?

  1. 準備作業
 <script>
    let jsonp = () => {

    }
    jsonp('https://photo.sina.cn/aj/index', {
      page: 1,
      cate: 'recommend'
    })
    .then(response => {
      console.log(response,'呼叫成功啦');
    })
  </script>
復制代碼
  1. 具體實作流程
  • 確定傳遞引數: url 、攜帶的引數 、callback;
  • 處理url上的引數(?后面的);
  • 準備好url(攜帶callback函式);
  • 構建script標簽;
  • 把這個標簽掛到window上
<script>
    // 1、確定好引數
    let jsonp = (url,data = {},callback = 'callback') => {
    // 2、處理好url里面的引數
      let dataStr = url.indexOf('?') === -1 ? '?':'&'
    // 3、把引數和&拼接上去
      for (let key in data) {
        dataStr += `${key}=${data[key]}&`;
      }
    // 4、把callback拼接上
      dataStr += 'callback=' + callback;
    // 5、創建一個script標簽
      let oScript = document.createElement('script');
      oScript.src = url + dataStr;
      document.body.appendChild(oScript);
     // 6、把script標簽掛載到window上去

    //方案一、
      // window[callback] = (data) => {
      //   console.log(data);
      // }
    // 方案二、
      return new Promise((reslove,reject) => {
        window[callback] = (data) => {
          try {
            reslove(data)
          } catch(e) {
            reject(e)
          } finally {
            oScript.parentNode.removeChild(oScript);
            //洗掉這個script節點
          }
        }
      })
    }
    //呼叫jsonp方法
    jsonp('https://photo.sina.cn/aj/index?a=1', {
      page: 1,
      cate: 'recommend'
    })
    .then(response => {
      console.log(response,'呼叫成功啦');
    })
  </script>
復制代碼

3.3.4、實作一個jsonp服務器端?(node版本,express版本)

node版本

創建一個結構如下的服務器端檔案夾,我們將在index.js中實作我們的JSONP:

var http = require('http');
http.createServer(function(req, res){
// req url  callback=?
console.log(req.url);
let data = {a: 1};
res.writeHead(200, {'Content-type' : 'text/json'})
  const reg = /callback=([\w]+)/
  if (reg.test(req.url)) {
    let padding = RegExp.$1
    res.end(`${padding}(${JSON.stringify(data)})`)
  } else {
    res.end(JSON.stringify(data));
  }
//  res.end('<p>Hello World</p>');
 res.end(JSON.stringify(data));
}).listen(3000);
復制代碼

express 版本

var express = require('express');
var cors = require('cors');//后端cors 中間件
const app = express();
app.use(cors());
app.get('/product',(req,res)=>{
    res.json({
        a:1,
        b:2
    })
})
app.listen(8000,()=>{
    console.log('server is ok')
})
復制代碼

3.4 cors

3.4.1、介紹一下cors?

CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing),它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制,

3.4.2、簡單請求和非簡單請求?

瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request),

除了簡單請求其他的都是非簡單請求,因此只要記住哪些是簡單請求就可以啦:

簡單請求:(需要同時滿足下面兩種條件)

  1. 請求方法是以下三種方法之一:
  • HEAD
  • GET
  • POST
  1. HTTP的頭資訊不超出以下幾種欄位:
  • Accept:設定接受的內容型別(請求頭)
  • Accept-Language:設定接受的語言(請求頭)
  • Content-Language:為封閉內容設定自然語言或者目標用戶語言(回應頭)
  • Content-Type:(設定請求體的MIME型別(適用POST和PUT請求))只限于三個值

application/x-www-form-urlencoded

中默認的encType,form表單資料被編碼為key/value格式發送到服務器(表單默認的提交資料的格式)

multipart/form-data:將表單的資料處理為一條訊息,以標簽為單元,用分隔符分開,既可以上傳鍵值對,也可以上傳檔案,

text/plain:text/plain :純文本格式

3.4.3、專案中怎么使用?

  • 服務器端:
const express = require('express');
const app= express();

app.get('/', (req, res)=>{
  console.log('server is OK');
  res.end('jingjing')
});

// app.use((req, res, next) => {
// 	res.header("Access-Control-Allow-Origin",'http://localhost:5500');
// 	res.header("Access-Control-Allow-Credentials", true);
// 	res.header("Access-Control-Allow-Headers", 'Content-Type,Content-Length,Authorization, Accept,X-Requested-With');
// 	res.header("Access-Control-Allow-Methods", 'PUT,POST,GET,DELETE,OPTIONS,HEAD');
// 	req.method === 'OPTIONS' ? res.send('CURRENT SERVICES SUPPORT CROSS DOMAIN REQUESTS!') : next();
// });

app.listen(8081, ()=>{
    console.log('Server is running at http://localhost:8081')
})

復制代碼
  • 前端請求:
  <body>
    <button onclick="sendAjax()">sendAjax</button>
  <script type="text/javascript">
    var sendAjax = () => {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://127.0.0.1:5500', true);
        xhr.send();
        xhr.onreadystatechange = function (e) {
          if (xhr.readyState == 4 && xhr.status == 200) {
            console.log(xhr.responseText);
            console.log('成功了')
          }
        };
    }
  </script>
  </body>
復制代碼

跨域報錯:

把中間注釋的部分放開再執行:沒有上面的報錯了,也回傳了

console.log(xhr.responseText);
console.log('成功了')

分析一下:

  • “Access-Control-Allow-Origin”,http://localhost:5500

如果服務端僅允許來自 http://localhost:5500的訪問,如果服務端回傳的 Access-Control-Allow-Origin: * 表明,該資源可以被任意外域訪問,

  • “Access-Control-Allow-Credentials”, true):

Access-Control-Allow-Credentials 頭指定了當瀏覽器的credentials設定為true時是否允許瀏覽器讀取response的內容,

  • “Access-Control-Allow-Headers”, ‘Content-Type,Content-Length,Authorization, Accept,X-Requested-With’):

首部欄位 Access-Control-Allow-Headers 表明服務器允許請求中攜帶欄位 X-PINGOTHER 與 Content-Type,

  • “Access-Control-Allow-Methods”, ‘PUT,POST,GET,DELETE,OPTIONS,HEAD’:

首部欄位 Access-Control-Allow-Methods 表明服務器允許客戶端使用 POST, GET 和 OPTIONS 等方法發起請求

  • req.method === ‘OPTIONS’ ? res.send(‘CURRENT SERVICES SUPPORT CROSS DOMAIN REQUESTS!’) : next():

“需預檢的請求”要求必須首先使用 OPTIONS 方法發起一個預檢請求到服務器,以獲知服務器是否允許該實際請求(除簡單請求以外的,比如 POST方法就需要用到預檢)

3.5、代理 (nginx)

3.5.1 原理

A網站向B網站請求1.js檔案時,向B網站發送一個獲取的請求,nginx根據組態檔接收這個請求,代替A網站向B網站來請求這個資源,nginx拿到這個資源后再回傳給a網站,以此來解決了跨域問題,

3.5.2 使用

使用Nginx,有關下載和配置Nginx,我就不再這里說了,感興趣的小伙伴可以參考一下這篇文章,里面配置相關的講的比較清楚,正確的Nginx跨域配置

(自己平時也沒怎么用就是,唉,大多知識點也是一邊寫一邊理)

但是的但是,學習還是要學滴,回到最開始我們提到的一些問題,來看看你能回答多少 👇👇👇

總結

最后再來一次拷問:

  1. 能說說跨域嗎?
  2. 能說說同源策略嗎?
  3. 為什么要同源策略,它限制了什么?
  4. 你知道哪些跨域方案呢?
  5. 有關cookie的跨域怎么實作?
  6. 能具體說說JSONP嗎?回傳什么資料呢,前端怎么處理呢?知道什么原理嗎?實作過嗎?JSONP服務器端實作過嗎?
  7. postMessage 了解嗎?怎么使用?需要注意什么?(安全方面)
  8. 代理了解過嗎?用過哪些代理方案呢不?怎么在專案中用呢?
  9. cors可以具體說一個簡單請求和非簡單請求嗎?具體程序說一下?專案中怎么使用?

🙈

最后(相關面試題)

因為有拷問題了,拷問題大家能回答上也是掌握啦,這次的面試題小編就以PDF形式展示給大家,不然篇幅被限制了,面試題出不來啦,需要前端面試題完整版PDF的,點擊這里直接領取:


好啦,有關跨域的就梳理到這里了,逐點突破系列也更新到第二期了,小編更新的慢小伙伴們不要建議哈,這個系列你想知道那個知識點也可以告訴我哦,我們一起來“逐點突破”!
你的一鍵三連是我最大的支持 你的評論是我最大鼓勵🤞 逐點突破,突破自我!我們下期見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278028.html

標籤:其他

上一篇:web安全常見的加密編碼進制

下一篇:萬字長文深入剖析volatile(Java)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more