浏览代码

导出excel签名漏洞

TonyKang 3 年之前
父节点
当前提交
0eee3afa74
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      app/reports/util/rpt_excel_util.js

+ 12 - 1
app/reports/util/rpt_excel_util.js

@@ -1032,7 +1032,8 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
     }
     // 插入分页符结束---------------------------
     // 图形要放在最后,否则excel会报错(但WPS不会)
-    if (hasSignature && signSheetIdxArr[sheetIdx]) {
+    // console.log(`sheetData is null: ${sheetData === null}`);
+    if (hasSignature && (sheetData === null || signSheetIdxArr[sheetIdx])) {
         // let rIdx = 1;
         // for (let ssIdx = 0; ssIdx < signSheetIdxArr.length; ssIdx++) {
         //     if (signSheetIdxArr[ssIdx]) {
@@ -1367,10 +1368,14 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
         //     signPathArr.push([]);
         // }
         // 优化调整,不再每页都设置一个,重复的签名只需要一个即可(极端case: 13xx多页的签名文档,导出有1.3G大)
+        // console.log('signKeyArr');
+        // console.log(signKeyArr);
         const curSignIdx = signKeyArr.length - 1;
         signSheetIdxArr[pageIdx] = false;
         // console.log('page index: ' + pageIdx);
         // console.log(page[JV.PROP_SIGNATURE_CELLS]);
+        // console.log('chkRoles');
+        // console.log(chkRoles);
         if (page[JV.PROP_SIGNATURE_CELLS] && page[JV.PROP_SIGNATURE_CELLS].length > 0) {
             // let dummySignIdx = 0;
             for (const signature of page[JV.PROP_SIGNATURE_CELLS]) {
@@ -1456,6 +1461,10 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
                                     let sPObj = _getDupPicPath(role.sign_path);
                                     if (sPObj !== null && isSinglePage) { // 只有在isSinglePage为true时,才需要优化签名
                                     // if (sPObj !== null) {
+                                    //     console.log('signature');
+                                    //     console.log(signature);
+                                    //     console.log('role');
+                                    //     console.log(role);
                                         signature.signature_name = sPObj.signature_name; // 重点,如果有相同路径的,修改signature_name!
                                         // signSheetIdxArr[pageIdx] = true;
                                         rst = true;
@@ -1466,6 +1475,8 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
                                         signKeyArr.push(signature.signature_name);
                                         rst = true;
                                         signSheetIdxArr[pageIdx] = true;
+                                        // console.log(`pageIdx: ${pageIdx}`);
+                                        // console.log(signSheetIdxArr);
                                     }
                                 }
                                 break;