整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          Highlight.js - 前端的代碼語(yǔ)法高亮庫(kù)

          Highlight.js - 前端的代碼語(yǔ)法高亮庫(kù)

          辛萬(wàn)苦寫(xiě)了篇技術(shù)分享,貼了一堆代碼,興高采烈地發(fā)到了自己的博客網(wǎng)站上。結(jié)果卻發(fā)現(xiàn)代碼全是白底黑字,字體還難看得很,你瞬間就沒(méi)了興致。能不能讓網(wǎng)頁(yè)也能像 IDE 那樣,做帶語(yǔ)法高亮的炫酷顯示呢?來(lái)看一看 Highlight.js 吧,看這個(gè)語(yǔ)法高亮庫(kù)如何點(diǎn)亮你的代碼。

          Highlight.js

          簡(jiǎn)介

          Highlight.js,是在 Github 上由 highlight.js 組織開(kāi)源的前端代碼語(yǔ)法高亮庫(kù),代碼倉(cāng)庫(kù)在 https://github.com/highlightjs/highlight.js,目前版本為 10.1.0。其不依賴(lài)于任何框架,自帶對(duì)于大量編程語(yǔ)言和標(biāo)記語(yǔ)言的語(yǔ)法高亮規(guī)則,和主流的高亮色彩方案,且可以自由擴(kuò)展。其支持自動(dòng)語(yǔ)言檢測(cè),使用極為方便,是在網(wǎng)頁(yè)上進(jìn)行語(yǔ)法高亮的不二之選。

          highlight.js語(yǔ)法高亮庫(kù)

          安裝

          Highlight.js 的 CSS 文件的選擇決定高亮配色方案,默認(rèn)為 Default,另外還有如 Monokai Sublime、Ocean、Solarized Dark、Tomorrow 等經(jīng)典的主流配色方案。

          而 JS 文件的選擇決定可以支持的語(yǔ)言。主要的 highlight.min.js 包含了一些主流的語(yǔ)言,包括 C++、XML、Markdown、Java 等。如果需要一些其他的語(yǔ)言,則要另外引用該語(yǔ)言對(duì)應(yīng)JS文件。

          Highlight.js 在瀏覽器中可以簡(jiǎn)單的引用 CDN 來(lái)使用:

          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/styles/default.min.css">
          <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/highlight.min.js"></script>

          示例

          Highlight.js 使用十分簡(jiǎn)單,在引用了 CSS 和 JS 后,執(zhí)行

          hljs.initHighlightingOnLoad();

          Highlight.js就會(huì)自動(dòng)查找網(wǎng)頁(yè)中以標(biāo)簽 pre 和 code 所包裹的代碼

          <pre><code>...</code></pre>

          并自動(dòng)檢測(cè)代碼語(yǔ)言,進(jìn)行高亮渲染。我們也可以為 code 標(biāo)簽添加語(yǔ)言名稱(chēng)的 class,來(lái)顯式地標(biāo)明代碼語(yǔ)言。我們可以看一個(gè)使用示例,注意實(shí)際代碼中尖括號(hào)等 HTML 轉(zhuǎn)義字符需要進(jìn)行轉(zhuǎn)義處理:

          <html>
          <head>
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/styles/monokai-sublime.min.css">
            <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/highlight.min.js"></script>
          </head>
          <body>
            <pre><code class="cpp">#include <iostream>
          
          int main(int argc, char *argv[]) {
          
              /* An annoying "Hello World" example */
              for (auto i=0; i < 0xFFFF; i++)
                  cout << "Hello, World!" << endl;
          
              char c='\n';
              unordered_map <string, vector<string> > m;
              m["key"]="\\\\"; // this is an error
          
              return -2e3 + 12l;
          }
            </code></pre>
            <script>
              hljs.initHighlightingOnLoad();
            </script>
          </body>
          </html>

          該網(wǎng)頁(yè)對(duì)于 C++ 語(yǔ)言片段使用了 Monokai Sublime 主題進(jìn)行了語(yǔ)法高亮渲染:

          使用Highlight.js渲染C++代碼

          可以看到,包括關(guān)鍵字、注釋和字面值等都有了不同顏色的渲染,輸出十分美觀。以下則是使 Dracula 主題對(duì) Javascript 代碼渲染的例子:

          使用Highlight.js渲染Javascript代碼

          我們也可以不使用 pre 和 code 標(biāo)簽來(lái)包裹代碼,改為使用自定義的容器,使用時(shí)需要注意換行和等寬字體的問(wèn)題。

          document.querySelectorAll('div.code').forEach((block)=> {
            hljs.highlightBlock(block);
          });

          在渲染大量代碼時(shí),為避免瀏覽器卡死,可以使用 Web Worker 來(lái)在后臺(tái)進(jìn)行渲染:

          // index.html
          addEventListener('load', ()=> {
            const code=document.querySelector('#code');
            const worker=new Worker('worker.js');    // 新建Worker
            worker.onmessage=(event)=> { code.innerHTML=event.data; }    // 接受渲染后的HTML
            worker.postMessage(code.textContent);    // 傳遞代碼
          });
          // worker.js
          onmessage=(event)=> {
            importScripts('<path>/highlight.min.js');
            const result=self.hljs.highlightAuto(event.data);    // 高亮渲染
            postMessage(result.value);    // 返回HTML
          };

          總結(jié)

          Highlight.js 使得在前端頁(yè)面進(jìn)行語(yǔ)法高亮變得十分方便,為在網(wǎng)頁(yè)顯示的代碼增添了顏色和生機(jī)。

          Highlight.js 文檔詳盡,設(shè)計(jì)簡(jiǎn)潔,為編寫(xiě)新的語(yǔ)言支持和配色方案提供了很大支持,定制化能力和可擴(kuò)展性極強(qiáng)。Highlight.js 的代碼包含了對(duì)于各種語(yǔ)言的語(yǔ)法解析,和不同配色方案的設(shè)計(jì),對(duì)于對(duì)編程語(yǔ)言和語(yǔ)法高亮領(lǐng)域感興趣的開(kāi)發(fā)者是一座珍貴的寶庫(kù)。

          者:前端藏經(jīng)閣

          轉(zhuǎn)發(fā)鏈接:https://www.yuque.com/xwifrr/qbgcq0/vkczro

          x01前言

          很久沒(méi)有日站了,最近都在擼代碼,所以這次就拿了個(gè)站練了練了手,那個(gè)站的內(nèi)容是初高中生最怕的東西了,我有義務(wù)去消滅這玩意

          0x02尋找漏洞

          首先看到這里,我第一反應(yīng)就是檢查有沒(méi)有保留xss

          在詳細(xì)地址那里加上一段簡(jiǎn)單的xss代碼

          <script>alert(/xss/)</script>

          保存

          可是保存后可是并沒(méi)有彈框,用firebug看看是不是過(guò)濾

          看上去好像沒(méi)有過(guò)濾,但是這樣子并不能知道到底是不是被轉(zhuǎn)義了

          右鍵,點(diǎn)擊編輯html

          看到尖括號(hào)都被轉(zhuǎn)義了,所以這是沒(méi)有xss

          只能看看其他地方能不能有xss

          我抱著試試的心情去昵稱(chēng)那里,在那里加上alert

          仍然跟之前一樣

          就是不知道會(huì)不會(huì)出現(xiàn)這種情況

          https://bbs.ichunqiu.com/thread-19497-1-1.html

          我就去個(gè)人首頁(yè)看了下

          成功彈窗

          0x03利用漏洞

          既然有xss,那應(yīng)該去釣cookie才對(duì),可是釣個(gè)人用戶(hù)完全沒(méi)用啊

          不知道能不能掉到后臺(tái)

          我就去翻看這個(gè)網(wǎng)站的功能

          看看有沒(méi)有和后臺(tái)可以互動(dòng)的地方

          讀者問(wèn)答看看是讀者和讀者之間的問(wèn)答,還是讀者去問(wèn)后臺(tái)管理

          看了一下里面的內(nèi)容,80%是和后臺(tái)管理互動(dòng)的

          既然這樣我也去提問(wèn)

          只不過(guò)加上了一串js代碼,xss平臺(tái)用來(lái)盜取cookie

          提交過(guò)去,就等cookie了

          0x04拿到cookie

          過(guò)了好幾天,一個(gè)短信發(fā)過(guò)來(lái),上面的內(nèi)容是如何把英語(yǔ)學(xué)好

          我就突然想到我在那個(gè)網(wǎng)站打了xss

          趕快打開(kāi)我的xss平臺(tái),看看有沒(méi)有cookie

          拿到cookie和后臺(tái),看來(lái)是有xss了

          接下來(lái)就嘿嘿嘿了

          先訪問(wèn)后臺(tái)頁(yè)面

          然后打開(kāi)burpsuite進(jìn)行攔包

          把cookie改為admin的cookie,然后進(jìn)行訪問(wèn)

          可是結(jié)果

          沒(méi)有進(jìn)入后臺(tái)

          我這就納悶了,怎么進(jìn)不去呢

          我在觀察了一下數(shù)據(jù)包

          發(fā)現(xiàn)了一個(gè)嚴(yán)重的問(wèn)題

          看到綠色箭頭指的那里

          為什么我要加上一個(gè)文件名呢?又沒(méi)說(shuō)他一定會(huì)跳轉(zhuǎn)

          果斷去掉文件名

          好,看看這樣能不能進(jìn)去

          按下forward

          看著頁(yè)面

          好進(jìn)去了

          看看了他的功能

          看著他的功能,我不禁在心里說(shuō)了一句mmp

          這時(shí)我有一個(gè)猜想,我既然是在這里打的cookie

          那這個(gè)人的權(quán)限應(yīng)該也就這些了

          我就想著能不能拿下其他人的權(quán)限

          0x05拿下更高管理權(quán)限

          我就琢磨著更高權(quán)限可以干什么

          這個(gè)網(wǎng)站有一個(gè)購(gòu)買(mǎi)書(shū)的功能

          那管理這里的人應(yīng)該更牛逼

          我就想著能和這些人互動(dòng)的辦法有哪些

          看來(lái)只能去買(mǎi)書(shū)了

          這樣后臺(tái)才能看到

          由于我就下訂單

          在詳細(xì)地址那里打上js

          然后只能花上15塊錢(qián)買(mǎi)了這本破書(shū)了(包括路費(fèi))

          如果不能拿到cookie,我就f**k了

          購(gòu)買(mǎi)以后

          我就等著cookie,第二天,打開(kāi)xss平臺(tái),出現(xiàn)一條cookie

          有可能這就是控制買(mǎi)書(shū)的

          拿著這個(gè)cookie用同樣的方法進(jìn)入后臺(tái)

          看著這個(gè)功能

          2333果然不一樣

          歡迎各位小伙伴私信群號(hào),一起進(jìn)群交流


          主站蜘蛛池模板: 无码国产精品一区二区免费3p| 国产精品女同一区二区| 日韩精品一区二区三区不卡 | 91亚洲一区二区在线观看不卡| 香蕉久久AⅤ一区二区三区| 日韩久久精品一区二区三区| 亚洲AV无码一区二区三区人| 精品福利视频一区二区三区| 精品福利视频一区二区三区 | 日韩精品乱码AV一区二区| 久久精品国产一区二区三区肥胖 | 国产精品视频一区| 无码午夜人妻一区二区不卡视频| 国产成人无码精品一区不卡| 日韩有码一区二区| 国产在线精品一区二区在线观看| 不卡无码人妻一区三区音频| 无码一区二区三区免费| 久久精品日韩一区国产二区| 国产成人一区二区在线不卡 | 色偷偷一区二区无码视频| 蜜桃无码一区二区三区| 亚洲欧美日韩国产精品一区| 无码日韩人妻AV一区免费l| 亚洲AV无一区二区三区久久| 国产高清在线精品一区| 亚洲午夜日韩高清一区| 亚洲国产精品综合一区在线| 亚洲日韩国产一区二区三区| 亚洲男女一区二区三区| 相泽南亚洲一区二区在线播放| 国产成人无码AV一区二区在线观看| 无码人妻一区二区三区免费n鬼沢| 日韩中文字幕精品免费一区| 久久精品一区二区三区中文字幕 | 日本免费一区二区久久人人澡| 国产一区二区三区影院| 手机看片福利一区二区三区 | 国产福利酱国产一区二区| 国产精品 一区 在线| 韩国精品福利一区二区三区|