Skip to content

Commit d4bbc58

Browse files
fix: update MdEditor component to prevent potential XSS attacks
1 parent abd3c24 commit d4bbc58

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"axios": "^1.7.2",
3939
"codemirror": "^6.0.1",
4040
"crypto-js": "^4.2.0",
41+
"dompurify": "^3.3.1",
4142
"echarts": "^5.5.0",
4243
"element-plus": "2.9.9",
4344
"fit2cloud-ui-plus": "^1.2.0",
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<template>
2+
<MdEditor previewOnly v-model="sanitizedReadMe" :theme="isDarkTheme ? 'dark' : 'light'" />
3+
</template>
4+
5+
<script lang="ts" setup>
6+
import MdEditor from 'md-editor-v3';
7+
import 'md-editor-v3/lib/style.css';
8+
import DOMPurify from 'dompurify';
9+
import { GlobalStore } from '@/store';
10+
import { storeToRefs } from 'pinia';
11+
12+
const globalStore = GlobalStore();
13+
const { isDarkTheme } = storeToRefs(globalStore);
14+
const props = defineProps({
15+
content: {
16+
type: String,
17+
default: '',
18+
},
19+
});
20+
const sanitizedReadMe = computed(() => {
21+
return DOMPurify.sanitize(props.content);
22+
});
23+
</script>

frontend/src/components/system-upgrade/index.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
{{ upgradeInfo.testVersion }}
7070
</el-radio>
7171
</el-radio-group>
72-
<MdEditor v-model="upgradeInfo.releaseNote" previewOnly :theme="isDarkTheme ? 'dark' : 'light'" />
72+
<MarkDownEditor :content="upgradeInfo.releaseNote" />
7373
</div>
7474
<template #footer>
7575
<span class="dialog-footer">
@@ -81,10 +81,10 @@
8181
</template>
8282
<script setup lang="ts">
8383
import DrawerHeader from '@/components/drawer-header/index.vue';
84+
import MarkDownEditor from '@/components/mkdown-editor/index.vue';
85+
8486
import { getSettingInfo, loadReleaseNotes, loadUpgradeInfo, upgrade } from '@/api/modules/setting';
85-
import MdEditor from 'md-editor-v3';
8687
import i18n from '@/lang';
87-
import 'md-editor-v3/lib/style.css';
8888
import { MsgSuccess } from '@/utils/message';
8989
import { copyText } from '@/utils/util';
9090
import { onMounted, ref, computed } from 'vue';
@@ -93,7 +93,7 @@ import { ElMessageBox } from 'element-plus';
9393
import { storeToRefs } from 'pinia';
9494
9595
const globalStore = GlobalStore();
96-
const { isDarkTheme, docsUrl } = storeToRefs(globalStore);
96+
const { docsUrl } = storeToRefs(globalStore);
9797
9898
const mobile = computed(() => {
9999
return globalStore.isMobile();

frontend/src/views/app-store/detail/index.vue

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,21 +72,18 @@
7272
</div>
7373
</div>
7474
</div>
75-
<MdEditor previewOnly v-model="app.readMe" :theme="isDarkTheme ? 'dark' : 'light'" />
75+
<MarkDownEditor :content="app.readMe" />
7676
</el-drawer>
7777
<Install ref="installRef"></Install>
7878
</template>
7979

8080
<script lang="ts" setup>
81+
import MarkDownEditor from '@/components/mkdown-editor/index.vue';
82+
8183
import { GetApp, GetAppDetail } from '@/api/modules/app';
82-
import MdEditor from 'md-editor-v3';
8384
import { ref } from 'vue';
8485
import Install from './install/index.vue';
8586
import router from '@/routers';
86-
import { GlobalStore } from '@/store';
87-
import { storeToRefs } from 'pinia';
88-
const globalStore = GlobalStore();
89-
const { isDarkTheme } = storeToRefs(globalStore);
9087
9188
const app = ref<any>({});
9289
const appDetail = ref<any>({});

0 commit comments

Comments
 (0)