Browse Source

漏洞相关修改

jack.zhou 3 weeks ago
parent
commit
ff8a05ea45
2 changed files with 16 additions and 7 deletions
  1. BIN
      dist_0918_1.tar
  2. 16 7
      src/utils/url.ts

BIN
dist_0918_1.tar


+ 16 - 7
src/utils/url.ts

@@ -6,16 +6,24 @@ import { Local } from './storage';
 /**
  * 给文件地址拼接登录用户 token 参数
  * 用于 <a href> / window.open / van-image :src / showImagePreview 等无法携带 Authorization 头的直链访问
- * @param url 原始文件地址
- * @returns 拼接 token 后的地址(非 http(s) / 空 / data: / blob: 直接原样返回,避免本地静态资源被污染)
+ * @param url 原始文件地址(http(s) / 相对路径统一拼接,data: / blob: 等特殊协议原样返回)
+ * @returns 拼接 token 后的地址
  */
 export function withToken(url?: string | null): string {
   if (url === null || url === undefined) return '';
   const str = String(url).trim();
   if (!str) return str;
-  if (str.startsWith('data:') || str.startsWith('blob:') || str.startsWith('about:') || str.startsWith('#')) return str;
-  // 仅 http(s) 文件直链需要鉴权,本地静态资源直接返回
-  if (!/^https?:\/\//i.test(str)) return str;
+  const lower = str.toLowerCase();
+  if (
+    lower.startsWith('data:') ||
+    lower.startsWith('blob:') ||
+    lower.startsWith('about:') ||
+    lower.startsWith('javascript:') ||
+    lower.startsWith('mailto:') ||
+    lower.startsWith('tel:') ||
+    str.startsWith('#')
+  )
+    return str;
   let token = '';
   try {
     token = Local.get('token') || '';
@@ -59,7 +67,7 @@ export function stripToken(url?: string | null): string {
  * @returns 完整的图片URL
  */
 export function getImageUrl(url: string): string {
-  // 图片是相对路径不需要拼,但文件直链需要拼接登录 token 鉴权
+  // 仪器图/头像等统一拼接登录 token 鉴权(含相对路径)
   return withToken(url);
   // if (!url) return ''
 
@@ -99,5 +107,6 @@ export function getResourceUrl(url: string, baseUrlKey: string = 'VITE_IMAGE_BAS
   const cleanBaseUrl = baseUrl.replace(/\/$/, '')
   const cleanUrl = url.startsWith('/') ? url : `/${url}`
 
-  return `${cleanBaseUrl}${cleanUrl}`
+  // 相对路径也要拼接 token
+  return withToken(`${cleanBaseUrl}${cleanUrl}`)
 }