diff --git a/kernel/api/block.go b/kernel/api/block.go index 8bf57072e..c8d31d55f 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -626,13 +626,18 @@ func getBlockInfo(c *gin.Context) { } rootTitle := root.IAL["title"] rootTitle = html.UnescapeString(rootTitle) + icon := root.IAL["icon"] + if strings.Contains(icon, ".") { + // XSS through emoji name https://github.com/siyuan-note/siyuan/issues/15034 + icon = util.FilterUploadFileName(icon) + } ret.Data = map[string]string{ "box": block.Box, "path": block.Path, "rootID": block.RootID, "rootTitle": rootTitle, "rootChildID": rootChildID, - "rootIcon": root.IAL["icon"], + "rootIcon": icon, } } diff --git a/kernel/model/file.go b/kernel/model/file.go index bd3c51ddf..3ad04ee94 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -80,7 +80,12 @@ func (box *Box) docFromFileInfo(fileInfo *FileInfo, ial map[string]string) (ret ret.Path = fileInfo.path ret.Size = uint64(fileInfo.size) ret.Name = ial["title"] + ".sy" - ret.Icon = ial["icon"] + icon := ial["icon"] + if strings.Contains(icon, ".") { + // XSS through emoji name https://github.com/siyuan-note/siyuan/issues/15034 + icon = util.FilterUploadFileName(icon) + } + ret.Icon = icon ret.ID = ial["id"] ret.Name1 = ial["name"] ret.Alias = ial["alias"]