日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【安全漏洞】gomarkdown/markdown 项目的 XSS 漏洞产生与分析

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【安全漏洞】gomarkdown/markdown 项目的 XSS 漏洞产生与分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

gomarkdown/markdown 是 Go 語言的一個流行模塊,它旨在快速地將 Markdown 文檔轉化為 HTML 頁面。而此次發現的漏洞,來源于作者在編寫其語法樹 Parser 的時候無意的一次 unescape。

漏洞復現

我們首先來看一段代碼。

package main import ("fmt""github.com/gomarkdown/markdown""html" ) func main() {var textToRender = "```\"1;><script/src=\"http://HOST/xss.js\"></script>\n\n```\n"var middleware = html.EscapeString(textToRender)var result = markdown.ToHTML([]byte(middleware), nil, nil)fmt.Println(string(result)) }

大部分人一眼看過來,發現有 html.EscapeString 方法進行過濾,可能就跟筆者一開始一樣,認為這里一定沒什么問題。其實不然,我們可以采用 v0.0.0-20210514010506-3b9f47219fe7,也就是筆者提交 issue 之前的最新版本來試一下,看結果會怎樣。

可以發現我們原本使用 html.EscapeString 進行轉義的字符不受影響地出現在了結果中,從而導致了 script 標簽被單獨完整地渲染到 HTML,從而引入了一個外部 js 文件。更進一步的說,為 XSS 提供了完美的條件。

漏洞分析

使用上述給出的代碼進行調試,先看一個調用棧。

從 ToHTML 方法進來之后直接到 doc := Parse(markdown, p),從而進入了 Parse 這個方法。

然后就是調用到 block 方法對輸入的 Markdown 字符串進行分塊的處理。在逐一判斷到代碼塊后進入了 fencedCodeBlock 方法。

在其中將代碼塊的內容分解填入對象之后,會進入 finalizeCodeBlock 進行一個收尾工作。

跟進去之后可以發現這個方法是這樣的。

func finalizeCodeBlock(code *ast.CodeBlock) {c := code.Contentif code.IsFenced {newlinePos := bytes.IndexByte(c, '\n')firstLine := c[:newlinePos]rest := c[newlinePos+1:]code.Info = unescapeString(bytes.Trim(firstLine, "\n"))code.Literal = rest} else {code.Literal = c}code.Content = nil }

code.Info 的內容被 unescapeString 處理了一次,也就是最后得到意外結果的問題根源。接著往后跟蹤,可以發現處理后的內容被放進對象 p 后直接利用語法樹完成了渲染,最終得到 HTML 字符串,而被解碼后的內容并沒有被二次轉義。


因此,最后得到的字符串就出現了上文的問題。

漏洞的修復

由于漏洞的產生是因為解碼后沒有再次編碼,因此可以將其使用 html.EscapeString 重新處理一次,將原有的語句做如下替換。

- code.Info = unescapeString(bytes.Trim(firstLine, "\n")) + code.Info = []byte(html.EscapeString(string(unescapeString(bytes.Trim(firstLine, "\n")))))

此時再重新運行一次文章開始時給出的代碼,可以得到如下結果。

<pre><code class="language-"1;&gt;&lt;script/src="http://HOST/xss.js"&gt;&lt;/script&gt;"> </code></pre>

可以發現由于再次進行了 HTML 實體轉義,script 標簽沒有被獨立渲染,從而避免了 XSS 的產生。

有需要網絡安全相關的資料可以關注私信我哦!!!

持續更新文章

總結

以上是生活随笔為你收集整理的【安全漏洞】gomarkdown/markdown 项目的 XSS 漏洞产生与分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 太久av | 日韩不卡高清 | 亚洲午夜精品一区二区 | 国产精品美女久久久久久久久 | 久久久久久不卡 | 理论片久久 | 亚洲一二三av | 黄色三级网络 | 国产精品成人电影在线观看 | 人人艹人人爱 | 国产亚洲精品成人无码精品网站 | 天天干天天操天天舔 | 国内久久 | 成人三级电影网站 | 国产精品另类 | 色88久久久久高潮综合影院 | 懂色av一区二区三区四区五区 | 日韩av在线播放观看 | 成人av资源在线 | 黄色av播放 | 成人3d动漫在线观看 | 精品成人av一区二区在线播放 | 人人搞人人爱 | 精品在线观看视频 | 午夜爽爽视频 | 欧美一区二区福利视频 | 美女在线国产 | 亚洲小视频在线 | 国产一区二区视频在线 | 中日韩黄色大片 | 国产美女精品视频国产 | 一本高清dvd在线播放 | 传媒av在线| 可以免费看的av网站 | 老司机深夜福利网站 | 91麻豆精品91久久久久同性 | xxxwww18| 日本涩涩网 | 在线一区 | 久久中文av| 美女视频一区 | 少妇高潮一区二区三区99小说 | 欧洲av一区二区三区 | 国产黄色特级片 | 一区二区三区精品免费视频 | 国产学生美女无遮拦高潮视频 | www.在线看 | 性爱视频免费 | 极品美妇后花庭翘臀娇吟小说 | 丁香花电影免费播放电影 | 另类图片亚洲色图 | 琪琪射 | 热@国产| 91精品国产综合久久久久久久 | 国产精品久久久久久人 | 国产偷人爽久久久久久老妇app | 婷婷丁香一区二区三区 | 欧美人在线 | 日韩无码精品一区二区 | 中文字幕在线观看线人 | 欧美人与禽猛交乱配 | 美女高潮黄又色高清视频免费 | 吃奶av| 一本大道东京热无码aⅴ | 国产精品午夜电影 | 亚洲色图欧美自拍 | 十大污网站 | 天堂网2020 | 国产精品毛片一区二区三区 | 国产综合图片 | 国产传媒在线播放 | 成人av动漫在线观看 | 日本爱爱网址 | 黄色片一级片 | 国产精品久久久久9999 | 免费毛片看 | 老头老太做爰xxx视频 | 国产欧美精品一区二区色综合朱莉 | 黑人巨大精品欧美黑寡妇 | 欧美aaa级| 免费视频久久久 | 亚洲影库 | 国产精品美女www | 亚洲精品一级片 | 亚洲清纯唯美 | 91porny丨首页入口在线 | 国产精品视频导航 | 182午夜视频 | 日本欧美www| 狠狠干很很操 | 亚洲精选一区 | 婷婷激情在线 | 一区在线播放 | 色综合99 | a级黄色小视频 | 中文字幕无码人妻少妇免费 | 三级做爰在线观看视频 | 黄站在线观看 |