diff --git a/Update.json b/Update.json index fbf81e36..467e4c56 100644 --- a/Update.json +++ b/Update.json @@ -3348,6 +3348,43 @@ } ], "Notes": "v3 显然需要在新年第一天发布(" + }, + "3.1.1": { + "UpdateDate": 1771489733913, + "Prerelease": true, + "UpdateContents": [ + { + "PR": 910, + "Description": "Fix XSS in post title rendering" + } + ], + "Notes": "Fixed a stored XSS vulnerability in discussion thread post titles." + }, + "3.1.2": { + "UpdateDate": 1771493127347, + "Prerelease": true, + "UpdateContents": [ + { + "PR": 911, + "Description": "Fix additional XSS vulnerabilities" + } + ], + "Notes": "Fixed additional stored XSS vulnerabilities where user-controlled data was inserted into innerHTML without sanitization." + }, + "3.2.0": { + "UpdateDate": 1771493320789, + "Prerelease": false, + "UpdateContents": [ + { + "PR": 910, + "Description": "Fix XSS in post title rendering" + }, + { + "PR": 911, + "Description": "Fix additional XSS vulnerabilities" + } + ], + "Notes": "No release notes were provided for this release." } } } \ No newline at end of file diff --git a/XMOJ.user.js b/XMOJ.user.js index aba3fd3d..74e4ef53 100644 --- a/XMOJ.user.js +++ b/XMOJ.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name XMOJ -// @version 3.1.0 +// @version 3.2.0 // @description XMOJ增强脚本 // @author @XMOJ-Script-dev, @langningchen and the community // @namespace https://github/langningchen @@ -1912,7 +1912,7 @@ async function main() { let UpdateDataCardListItem = document.createElement("li"); UpdateDataCardList.appendChild(UpdateDataCardListItem); UpdateDataCardListItem.className = "list-group-item"; - UpdateDataCardListItem.innerHTML = "(" + "#" + Data.UpdateContents[j].PR + ") " + Data.UpdateContents[j].Description; + UpdateDataCardListItem.innerHTML = "(" + "#" + Data.UpdateContents[j].PR + ") " + escapeHTML(Data.UpdateContents[j].Description); } let UpdateDataCardLink = document.createElement("a"); UpdateDataCardBody.appendChild(UpdateDataCardLink); @@ -3418,7 +3418,7 @@ async function main() { let UpdateDataCardListItem = document.createElement("li"); UpdateDataCardList.appendChild(UpdateDataCardListItem); UpdateDataCardListItem.className = "list-group-item"; - UpdateDataCardListItem.innerHTML = "(" + "#" + Data.UpdateContents[j].PR + ") " + Data.UpdateContents[j].Description; + UpdateDataCardListItem.innerHTML = "(" + "#" + Data.UpdateContents[j].PR + ") " + escapeHTML(Data.UpdateContents[j].Description); } let UpdateDataCardLink = document.createElement("a"); UpdateDataCardBody.appendChild(UpdateDataCardLink); @@ -3709,8 +3709,8 @@ async function main() { let UserInfoElement = document.createElement("div"); UserInfoElement.classList.add("col-auto"); UserInfoElement.style.lineHeight = "40px"; - UserInfoElement.innerHTML += "用户名:" + UserID + "
"; - UserInfoElement.innerHTML += "昵称:" + UserNick + "
"; + UserInfoElement.innerHTML += "用户名:" + escapeHTML(UserID) + "
"; + UserInfoElement.innerHTML += "昵称:" + escapeHTML(UserNick) + "
"; if (UtilityEnabled("Rating")) { UserInfoElement.innerHTML += "评分:" + ((await GetUserInfo(UserID)).Rating) + "
"; } @@ -4858,7 +4858,7 @@ int main() TitleLink.classList.add("link-secondary"); TitleLink.innerHTML = "🔒 "; } - TitleLink.innerHTML += Posts[i].Title; + TitleLink.innerHTML += escapeHTML(Posts[i].Title); let AuthorCell = document.createElement("td"); Row.appendChild(AuthorCell); GetUsernameHTML(AuthorCell, Posts[i].UserID); @@ -5202,12 +5202,12 @@ int main() Delete.style.display = ""; } } - PostTitle.innerHTML = ResponseData.Data.Title + (ResponseData.Data.ProblemID == 0 ? "" : ` - 题目` + ` ` + ResponseData.Data.ProblemID + ``); + PostTitle.innerHTML = escapeHTML(ResponseData.Data.Title) + (ResponseData.Data.ProblemID == 0 ? "" : ` - 题目` + ` ` + ResponseData.Data.ProblemID + ``); document.title = "讨论" + ThreadID + ": " + ResponseData.Data.Title; PostAuthor.innerHTML = ""; GetUsernameHTML(PostAuthor.children[0], ResponseData.Data.UserID); PostTime.innerHTML = GetRelativeTime(ResponseData.Data.PostTime); - PostBoard.innerHTML = ResponseData.Data.BoardName; + PostBoard.innerHTML = escapeHTML(ResponseData.Data.BoardName); let Replies = ResponseData.Data.Reply; PostReplies.innerHTML = ""; for (let i = 0; i < Replies.length; i++) { @@ -5357,7 +5357,7 @@ int main() if (Replies[i].EditPerson == Replies[i].UserID) { ReplyContentElement.innerHTML += `最后编辑于${GetRelativeTime(Replies[i].EditTime)}`; } else { - ReplyContentElement.innerHTML += `最后被${Replies[i].EditPerson}编辑于${GetRelativeTime(Replies[i].EditTime)}`; + ReplyContentElement.innerHTML += `最后被${escapeHTML(Replies[i].EditPerson)}编辑于${GetRelativeTime(Replies[i].EditTime)}`; } } let ContentEditElement = document.createElement("div"); diff --git a/package.json b/package.json index 3f59d6be..9dd923ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xmoj-script", - "version": "3.1.0", + "version": "3.2.0", "description": "an improvement script for xmoj.tech", "main": "AddonScript.js", "scripts": {