整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          從HTML源代碼中檢測并輸出暗鏈接


          在網絡安全領域,暗鏈接(或隱藏鏈接)是一種常見的網絡欺詐手段。它們通常隱藏在網頁代碼中,對普通用戶不可見,但可能指向惡意網站或用于執行不安全的操作。因此,從網頁源代碼中檢測并識別這些暗鏈接變得尤為重要。本文將探討如何從提取的HTML源代碼中檢測暗鏈接,并將這些鏈接進行輸出。

          一、理解暗鏈接

          什么是暗鏈接:

          暗鏈接通常指的是隱藏在網頁中,對用戶不明顯,但可能含有惡意內容的鏈接。

          暗鏈接的常見形式:

          完全隱藏的鏈接,如使用CSS將鏈接設為透明或大小為零。

          使用微小的文本或圖像作為鏈接。

          將鏈接嵌入到不相關元素中。

          二、HTML源代碼的檢測方法

          分析HTML結構:

          介紹如何查看和理解網頁的HTML源代碼。

          解釋如何識別HTML中的鏈接元素(通常是<a>標簽)。

          檢測暗鏈接的技術:

          使用HTML和CSS屬性來識別隱藏的鏈接,如display: none;、opacity: 0;或width: 0px; height: 0px;等。

          檢查鏈接的文本內容和尺寸,判斷是否可疑。

          三、實現暗鏈接檢測

          工具和技術選擇:

          介紹可用于解析HTML和CSS的工具,如Python的BeautifulSoup庫。

          代碼實現:

          提供一個基本的腳本示例,展示如何從HTML中提取鏈接并檢查其屬性以識別暗鏈接。

          四、案例分析

          實際網頁案例:

          選取一個包含暗鏈接的網頁作為案例,展示如何使用工具檢測這些鏈接。

          結果展示和分析:

          展示檢測到的暗鏈接,并對其可能的風險進行分析。

          五、總結與預防建議

          總結:

          強調檢測暗鏈接在網絡安全中的重要性。

          預防建議:

          提供一些基本的網絡安全建議,幫助用戶識別和避免訪問暗鏈接。

          小結

          通過本文的討論,讀者可以了解如何從HTML源代碼中檢測暗鏈接,并了解這些鏈接可能帶來的風險。雖然這需要一定的技術知識,但通過合適的工具和方法,可以有效地識別和防范這種網絡安全威脅。

          示例代碼(Python使用BeautifulSoup檢測暗鏈接)

          python

          from bs4 import BeautifulSoup

          import requests

          # 加載網頁內容

          url = "https://example.com"

          html_content = requests.get(url).text

          soup = BeautifulSoup(html_content, 'html.parser')

          # 檢測暗鏈接

          dark_links = []

          for link in soup.find_all('a'):

          if link.get('style'):

          styles = link.get('style').split(';')

          if any(s in styles for s in ['display:none', 'opacity:0', 'width:0px', 'height:0px']):

          dark_links.append(link.get('href'))

          # 輸出檢測到的暗鏈接

          print("Detected Dark Links:", dark_links)

          這段代碼演示了如何使用BeautifulSoup庫來解析HTML,并檢查每個鏈接的CSS樣式以識別是否為暗鏈接。這只是一個基本的示例,實際應用中可能需要更復雜的邏輯來處理各種隱藏技術。


          HTMLAgilityPack 是一個開源的.NET庫,旨在幫助開發人員處理和操作HTML文檔。它提供了解析HTML文檔、查詢DOM元素以及修改HTML內容的功能。HTMLAgilityPack 基于XPath和LINQ查詢,使得開發者能夠以類似于操作XML文檔的方式來操作HTML文檔。這使得從復雜的HTML結構中提取所需數據變得輕而易舉。

          正文


          HTMLAgilityPack 主要用于以下幾個方面:

          1. 解析HTML文檔:HTMLAgilityPack 可以將原始的HTML文檔解析成一個DOM(文檔對象模型)樹,使開發者能夠輕松地遍歷和操作HTML元素。
          2. 查詢和選擇元素:通過使用XPath表達式或LINQ查詢,您可以輕松地選擇和定位HTML文檔中的特定元素,從而實現數據的抽取和操作。
          3. 修改HTML內容:您可以使用HTMLAgilityPack來添加、刪除或修改HTML元素和屬性,以滿足特定的需求。
          4. HTML格式化與轉換:HTMLAgilityPack 還允許您將HTML文檔格式化為漂亮的字符串或轉換為其他格式,如純文本或Markdown。

          常用方法與學用屬性

          以下是一些常用的HTMLAgilityPack方法和屬性,以及它們的用途:

          1. HtmlDocument.Load(string path):從指定路徑加載HTML文檔。
          2. HtmlDocument.LoadHtml(string html):從字符串加載HTML文檔。
          3. HtmlDocument.DocumentNode:獲取整個HTML文檔的根節點。
          4. SelectSingleNode(string xpath):根據XPath表達式選擇單個節點。
          5. SelectNodes(string xpath):根據XPath表達式選擇多個節點。
          6. InnerText:獲取或設置元素的文本內容。
          7. OuterHtml:獲取或設置元素及其內部內容的HTML。
          8. Attributes:獲取元素的屬性集合。
          9. AppendChild(HtmlNode newChild):將新節點添加為子節點。
          10. Remove():從文檔中移除當前節點。

          Nuget安裝 HtmlAgilityPack庫

          解析并顯示標題

          我們使用 HttpClient 發送一個 GET 請求到指定的 HTTPS URL,并且讀取返回的響應內容。

          如果出現 HTTP 狀態碼 403 (Forbidden) 錯誤表示您的請求被服務器拒絕,通常是因為服務器認為您沒有權限訪問該資源。

          1. 檢查網站訪問權限:確保您有權訪問目標網站。有些網站可能需要登錄或具有特定權限才能訪問其內容。
          2. 用戶代理頭:有些網站要求用戶代理標頭,您可以嘗試在請求中添加一個用戶代理標頭來模擬瀏覽器行為
          3. Cookies 和 Session:如果目標網站使用 cookies 或會話來管理訪問權限,請確保您正確處理這些信息。您可能需要發送適當的 cookies 或會話信息以獲取訪問權限。
          4. IP封鎖:某些網站可能根據 IP 地址阻止訪問,如果您的 IP 被封鎖,您可能需要使用代理服務器來繞過封鎖。
          5. 代理服務器:如果您的網絡中存在代理服務器,請確保代理服務器的設置正確,并且允許訪問目標網站。
          6. 身份驗證:如果網站需要身份驗證,您可能需要在請求中包含適當的身份驗證憑據。您可以使用 HttpClient 的 DefaultRequestHeaders.Authorization 屬性來添加身份驗證標頭。
          7. 請求頭和參數:某些網站可能會要求特定的請求頭或查詢參數,您需要查看網站的文檔或分析網絡請求以確定所需的請求標頭和參數。
          private async void btnGetTitle_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
          
              string htmlContent = "";
              using (HttpClient httpClient = new HttpClient())
              {
                  try
                  {
          
                      httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
                     
                      HttpResponseMessage response = await httpClient.GetAsync("https://www.baidu.com");
                      
                      //檢查 HTTP 響應的狀態碼是否表示成功
                      response.EnsureSuccessStatusCode();
          
                      //讀取內容
                      byte[] bytes = await response.Content.ReadAsByteArrayAsync();
                      htmlContent = Encoding.UTF8.GetString(bytes);
          
                  }
                  catch (HttpRequestException ex)
                  {
          
                  }
              }
          
              doc.LoadHtml(htmlContent);
          
              HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
              if (titleNode != null)
              {
                  string title = titleNode.InnerText;
                  MessageBox.Show($"頁面標題:{title}");
              }
          }
          
          

          提取所有鏈接

          /// <summary>
          /// 通過url取得html內容
          /// </summary>
          /// <param name="url"></param>
          /// <returns></returns>
          private async Task<string> GetHtml(string url)
          {
          
              string htmlContent = "";
              using (HttpClient httpClient = new HttpClient())
              {
                  try
                  {
          
                      httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
          
                      HttpResponseMessage response = await httpClient.GetAsync(url);
          
                      response.EnsureSuccessStatusCode();
          
                      //讀取內容
                      byte[] bytes = await response.Content.ReadAsByteArrayAsync();
                      htmlContent = Encoding.UTF8.GetString(bytes);
          
                  }
                  catch (HttpRequestException ex)
                  {
          
                  }
              }
              return htmlContent;
          }
          
          private async void btnGetLinks_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
              string htmlContent =await GetHtml("https://www.baidu.com");
              doc.LoadHtml(htmlContent);
          
              HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a[@href]");
              if (linkNodes != null)
              {
                  foreach (HtmlNode linkNode in linkNodes)
                  {
                      string link = linkNode.GetAttributeValue("href", "");
                      lstLink.Items.Add(link);
                  }
              }
          }
          
          

          通過class 去找節點

          private async void btnGetSpecialLink_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
              string htmlContent = await GetHtml("https://news.baidu.com/");
              doc.LoadHtml(htmlContent);
          
              HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id=\"pane-news\"]/ul/li[@class=\"bold-item\"]/a");
              if (linkNodes != null)
              {
                  foreach (HtmlNode linkNode in linkNodes)
                  {
                      string link = linkNode.GetAttributeValue("href", "");
                      string title = linkNode.InnerText;
                      lnkSpecialLink.Items.Add(title + " " + link);
                  }
              }
          }
          
          

          快速找到節點path

          Linq 找查節點

          人說“互聯網中有50%以上的流量是爬蟲”,第一次聽這句話也許你會覺得這個說法實在太夸張了,怎么可能爬蟲比用戶還多呢?畢竟會爬蟲的相對與不會爬蟲的簡直少之又少。

          但是很多爬蟲工程師或者反爬蟲工程師講了實話:50%?你在逗我?就這么少的量?然后他舉出例子:

          某個公司的某個頁面的某個接口,每分鐘訪問量是1.2萬左右,這里面有都少正常用戶呢?50%?60%?正確答案是:500個以下,那我們來算算爬蟲占比:(12000-500)/12000=95.8%

          沒錯95.8%,這是一位反爬蟲工程師給出的爬蟲占比!!!

          那這么多的爬蟲它們在互聯網上做什么呢?答案當然是:孜孜不倦的爬取爬取網頁信息。今天我們就來講講組成互聯網的重要部分之一:HTML網頁。

          一、起源與發展

          前面我們介紹HTTP的時候,給大家講過是萬維網的發明者,互聯網之父計算機科學家蒂姆·伯納斯·李,在他最初的構想組成中就有:提出使用HTML超文本標記語言(Hypertext Markup Language)作為創建網頁的標準

          大家千萬記住HTML并不是一種編程語言,而是一種標記語言 (markup language),由W3C(萬維網聯盟)制定標準,然后由個大瀏覽器廠商自己去實現支持!

          下面我們來看看HTML標準的發展歷史:

          二、組成部分

          我們常說的網頁就是HTML頁面,而構成HTML頁面的東西有很多,如:html標簽、數據、css樣式、js等,那我們就主要講講以下這幾個組成部分。

          1.HTML標簽

          HTML標簽是構成HTML頁面的主要組成部分,我們來看一個HTML實際例子:

          <!--注冊頁-->
          <html>
          	<!--網頁頭-->
          	<head>
          		<meta charset="utf-8" />
          		<title>注冊頁</title>
          	</head>
          	<!--網頁體-->
          	<body>
          		<!--表單標簽-->
          		<form action="/register" method="post">
          			<div>用戶名:<input type="text" name="username"/></div>
          			<div>性 別:
          				<input name="sex" type="radio" checked="checked"/>男
          				<input name="sex" type="radio" />女
          			</div>
          			<div>密 碼:<input type="text" name="password"/></div>
          			<br/>
          			<input type="submit" value="注冊" style="width:150px;" />
          		</form>
          	</body>
          </html>	
          

          上面是一個非常簡陋的用戶注冊頁面(用于教學),用戶可以輸入用戶名性別和密碼然后點注冊就提交到服務器,下面我們來稍微講解以下這個頁面。

          • html標簽對限定了文檔的開始點和結束點,所有的元素和標簽都應該放在他們之間。
          • head標簽對表示網頁頭部信息,其中包含了網頁標題、網頁編碼、網站ico、網站引入的一些靜態資源(css、js)以及網站關鍵字SEO相關信息等。
          • body標簽對表示網頁體,幾乎所有的網頁內容都在這里展現。
          • form標簽對表示創建表單,表單用于向服務器傳輸數據,能夠包含 input 元素,比如文本字段、復選框、單選框、提交按鈕等等。
          • div標簽對是目前網頁中比較流行的標簽,在七八年年流行使用table來構思一個網頁,把一個網頁想象成多少行多少列,這種構思靈活性和維護性極差,并且Table標簽構思的網頁對google爬蟲和百度等這種搜索引擎收錄性很差,遇到多層表格嵌套時,會跳過嵌套的內容或直接放棄整個頁面。所以目前前端流行使用div+css來構思網頁,這樣的優點是代碼精簡、有很好的靈活性和可維護性。
          • input標簽用于搜集用戶信息,它可以根據不同的 type 屬性值,輸入字段擁有很多種形式。輸入字段可以是文本字段、復選框、掩碼后的文本控件、單選按鈕、按鈕等等。

          其他的HTML標簽豬哥就不多講,希望大家自己去網上學習。

          在有些初級web工程師面試中,面試過程中可能會讓你手寫一個用戶注冊功能,這里豬哥給大家講講大概的流程:

          1. 用戶點擊注冊連接(一般是get請求/register),然后服務器響應此請求返回一個注冊頁面
          2. 用戶輸入用戶名密碼、圖形驗證碼等信息,提交注冊信息(一般是post請求/register)
          3. 服務端收到信息后對信息做校驗(一般是前后端雙校驗),然后存入數據庫,返回注冊成功提示

          2.數據

          互聯網主要起到了信息交流的作用,而網頁作為主要的信息交換載體,標簽的主要作用就是包裹數據,讓數據能夠以人類可視的方式展現。

          尤其是一些新聞網站,他們主要以展示新聞信息為主,我們以頭條網頁來講講:

          在紅色框中圈出來的這些新聞,他們是把數據包裹在html標簽中,然后以列表的形式展示給用戶,接著我們來看看網頁代碼:

          我們可以看到新聞標題被a標簽包圍,還有一些如縮略圖、評論數、時間等信息構成了一條新聞簡述,然后多個新聞(li標簽)構成了一個列表(ul)。

          那服務器是如何將數據與封裝到頁面中去的呢?

          • 前后端未分離:前后端沒有分離的公司,一般是先由前端工程師寫好頁面(數據寫死),然后由后端程序員合頁面(就是將寫死的數據去掉,然后加上數據字段)。
          • 前后端分離:前后端沒分離最大的問題就是同一個頁面可能前后端開發同學都會去修改,修改的人少還行,但是如果開發人員一多,大家改來改去全亂了,而且發布也會有一定的限制,所以目前流行前后端分離,后端同學只需要提供數據,前端同學搭一個nodejs后臺自己渲染頁面。

          拿上面我們的簡陋的注冊頁面來講講前后端未分離時具體返回頁面步驟,假設我們用戶注冊成功然后登錄,登錄成功我們直接跳轉用戶主頁展示用戶名和性別,頁面如上圖,步驟如下:

          1. 用戶登錄成功,在數據庫中讀取用戶信息。
          2. 讀取到用戶數據后進行頁面渲染
          3. 返回渲染后的頁面給瀏覽器

          3.CSS樣式

          html標簽+數據構成了整個網頁的骨架,但是只有數據和html標簽的網頁是奇丑無比的

          層疊樣式表(英文全稱:Cascading Style Sheets 簡稱CSS)是一種用來表現HTML等文件樣式的計算機語言。css可以定義html現實的樣式,可以實現很多不同的效果、排版等等,html中所有的元素幾乎都需要css來管理樣式,而且現在越來越流行div+css搭配控制頁面排版和樣式,css主要通過三大選擇器來修飾html標簽。

          沒有css的頁面將會是雜亂無章或缺少美感的頁面,我們以上面簡單的用戶主頁為例子演示如何使用css以及css的功能。

          效果:

          代碼:

          css:

          4.js

          css使頁面有了很好看的樣式,但是卻沒有很好的交互性,何為交互性?就是用戶在使用產品時的瀏覽、點擊、切換使之方便、快捷、平滑都很合理,很友好。

          而js(JavaScript)則是增加網頁的動態功能,它定義了網頁的行為,提高用戶體驗。比如js可以監控到用戶的點擊,滑動等動作,然后根據用戶的這些動作來做一些操作。

          我們還是以上面簡單的用戶主頁為例子,用js(或jquery)來實現用戶修改用戶名或者性別信息。

          代碼:

          效果:

          一個大概的修改用戶信息流程:

          1. 點擊修改后通過js現實出輸入框
          2. 在用戶輸入的時候用js監聽輸入框內容,及時提醒用戶新的用戶名是否可用
          3. 再用戶點擊提交后,用ajax提交,并且做防止重復提交的操作
          4. 服務端反饋后用js做提示即可

          上面只是給大家做了一個非常簡單的js效果,給零基礎的朋友演示js是什么,有什么功能,但是js的功能遠不止這些,現在的js已經在前端、后端以及app中占據著重要的地位,當然還有使用在反爬蟲的js混淆。

          三、總結

          由于篇幅原因,豬哥這里只給大家演示一些非常基礎非常簡單的功能,如果想學習網頁的制作同學們可以自己去網上學習,這里推薦一個學習網站:菜鳥教程,希望大家都學習一些前端知識,因為爬蟲的第一步就是分析網頁,然后再根據網頁數據是內嵌在html標簽中,還是js動態加載,或者網站使用加密或混淆的反扒技術。當遇到反扒高手時,我們就需要去仔仔細細的分析js,這也被稱為解毒的過程(反扒工程師在代碼里投毒)。所以爬蟲與反扒的斗爭可謂其樂無窮!


          主站蜘蛛池模板: 无码中文人妻在线一区| bt7086福利一区国产| 国模私拍福利一区二区| 久久一区二区免费播放| 国产伦精品一区二区三区四区| 无码精品视频一区二区三区| 免费视频精品一区二区| 无码日本电影一区二区网站| 人妻激情偷乱视频一区二区三区 | 亚洲人成网站18禁止一区 | 国产伦精品一区二区三区视频猫咪 | 亚洲国产福利精品一区二区| 黑人大战亚洲人精品一区| 亚洲国产av一区二区三区| 国产一区二区三区在线观看影院| 国产香蕉一区二区三区在线视频| 精品深夜AV无码一区二区老年| 一区二区三区四区视频| 日韩高清国产一区在线| 亚洲国产视频一区| 一区一区三区产品乱码| 一区二区三区高清| 成人久久精品一区二区三区| 精品人妻少妇一区二区三区不卡| 无码aⅴ精品一区二区三区| 日本韩国一区二区三区| 日韩AV在线不卡一区二区三区| 一区二区三区在线观看免费| 国产成人高清视频一区二区 | 亚洲欧美日韩国产精品一区| 日韩中文字幕一区| 日韩精品一区二区三区在线观看l| 成人H动漫精品一区二区| 白丝爆浆18禁一区二区三区| 国产精品亚洲综合一区| 亚洲AV无码一区二区二三区软件| 久久精品一区二区三区AV| 亚洲性色精品一区二区在线| 国产一区中文字幕| 高清一区二区三区日本久 | 中文字幕一区二区三区在线不卡 |