samlesa 4.3.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,7 +64,7 @@ function base64LoginRequest(referenceTagXPath, entity, customTagReplacement) {
64
64
  action: 'after'
65
65
  },
66
66
  },
67
- isMessageSigned: true,
67
+ isMessageSigned: false,
68
68
  isBase64Output: true
69
69
  }),
70
70
  };
@@ -204,9 +204,6 @@ async function base64LoginResponse({ requestInfo = {}, entity, user = {}, custom
204
204
  }
205
205
  }
206
206
  //sign after encrypting
207
- /* console.log(encryptThenSign)
208
- console.log(encryptThenSign && (spSetting.wantMessageSigned || !metadata.sp.isWantAssertionsSigned()))
209
- console.log("结果====================")*/
210
207
  if (encryptThenSign && (spSetting.wantMessageSigned || !metadata.sp.isWantAssertionsSigned())) {
211
208
  rawSamlResponse = libsaml.constructSAMLSignature({
212
209
  ...config,
@@ -263,8 +263,6 @@ export class SpMetadata extends Metadata {
263
263
  }
264
264
  else {
265
265
  // 数据源本身为空,直接报错
266
- console.log(acsData);
267
- console.log("看下这是什么啊啊啊啊");
268
266
  return "";
269
267
  /* throw new Error("SAML Metadata Error: No AssertionConsumerService definitions found in metadata.");*/
270
268
  }
@@ -41,21 +41,51 @@ const metadataSchemas = [
41
41
  * @param samlString 待检测的 XML 字符串
42
42
  * @returns 如果存在可疑模式则返回匹配详情,否则返回 null
43
43
  */
44
+ /**
45
+ * 检测SAML字符串中可能的XXE攻击模式
46
+ * @param samlString - 要检查的SAML字符串
47
+ * @returns 包含发现的潜在XXE模式的对象,如果没有发现则返回null
48
+ */
44
49
  function detectXXEIndicators(samlString) {
50
+ // 更全面的XXE模式检测
45
51
  const xxePatterns = [
46
- /<!DOCTYPE\s[^>]*>/i, // DOCTYPE 声明
47
- /<!ENTITY\s+[^\s>]+\s+(?:SYSTEM|PUBLIC)\s+['"][^>]*>/i, // 外部实体声明
48
- /SYSTEM\s*['"]\s*file:\/\//i, // file:// 协议的系统引用
49
- /SYSTEM\s*['"]\s*\.\.\/.*\.dtd['"]?/i, // 相对路径的 DTD 引用
50
- /PUBLIC\s*['"][^'"]*['"]\s*['"][^'"]*\.dtd['"]?/i // 公共 DTD 引用
52
+ // DOCTYPE声明
53
+ /<!DOCTYPE\s+([a-zA-Z_][a-zA-Z0-9]*)((\s+[^>]*)?)>/gi,
54
+ // 外部实体声明(SYSTEM和PUBLIC)
55
+ /<!ENTITY\s+([a-zA-Z_][a-zA-Z0-9]*)\s+(SYSTEM|PUBLIC)\s+["'][^"']*["']\s*>/gi,
56
+ // file://协议引用
57
+ /SYSTEM\s+["']file:\/\/\/?([^"']+)["']/gi,
58
+ // HTTP/HTTPS外部实体
59
+ /SYSTEM\s+["'](https?:\/\/[^"']+)["']/gi,
60
+ // 本地文件引用
61
+ /SYSTEM\s+["'](\.\.\/|\/)[^"']*\.dtd["']/gi,
62
+ // 内部实体引用(可能用于Billion Laughs攻击)
63
+ /<!ENTITY\s+([a-zA-Z_][a-zA-Z0-9]*)\s+"?\1"?/gi,
64
+ // CDATA节中的恶意内容
65
+ /<!\[CDATA\[(.*?)\]\]>/gi,
66
+ // 注释中的潜在恶意内容
67
+ /<!--(.*?)-->/gi
68
+ ];
69
+ const patternNames = [
70
+ 'DOCTYPE Declaration',
71
+ 'External Entity Declaration',
72
+ 'File Protocol Reference',
73
+ 'HTTP External Entity',
74
+ 'Local File Reference',
75
+ 'Recursive Entity Reference',
76
+ 'CDATA Section',
77
+ 'Comment Section'
51
78
  ];
52
79
  const matches = {};
53
80
  xxePatterns.forEach((pattern, index) => {
81
+ // 重置正则表达式的lastIndex以便多次使用
82
+ pattern.lastIndex = 0;
54
83
  const found = samlString.match(pattern);
55
84
  if (found) {
56
- matches[`pattern_${index}`] = {
85
+ matches[patternNames[index]] = {
57
86
  pattern: pattern.toString(),
58
- matches: found
87
+ matches: found,
88
+ description: patternNames[index]
59
89
  };
60
90
  }
61
91
  });
@@ -230,39 +230,6 @@ function validatePEMHeaders(pem, keyType) {
230
230
  .trim() + // 清理空白
231
231
  `\n${expectedHeader}\n${pem}\n${expectedFooter}\n`;
232
232
  }
233
- /*export function readPrivateKey(
234
- keyString: string | Buffer,
235
- passphrase?: string,
236
- isOutputString: boolean = true
237
- ): string | Buffer {
238
- try {
239
- // 统一转换为字符串格式处理
240
- const pemKey = Buffer.isBuffer(keyString)
241
- ? keyString.toString('utf8')
242
- : keyString;
243
-
244
- // 创建私钥对象 (自动处理加密)
245
- const keyObject = createPrivateKey({
246
- key: pemKey,
247
- format: 'pem',
248
- passphrase: isString(passphrase) ? passphrase : undefined,
249
- encoding: 'utf8'
250
- });
251
-
252
- // 验证密钥类型为 RSA
253
- if (keyObject.asymmetricKeyType !== 'rsa') {
254
- throw new Error('仅支持 RSA 私钥类型');
255
- }
256
- // 强制转换为 PKCS#1 格式
257
- const exported = keyObject.export({
258
- type: 'pkcs1', // 明确指定 RSA 传统格式
259
- format: 'pem' // 输出为 PEM 格式
260
- }) as string;
261
- return isOutputString ? String(exported) : Buffer.from(exported, 'utf8');
262
- } catch (error) {
263
- throw new Error(`私钥读取失败: ${error.message}`);
264
- }
265
- }*/
266
233
  export function readPrivateKey(keyString, passphrase, isOutputString = true) {
267
234
  try {
268
235
  // 统一转换为字符串格式处理
@@ -302,6 +269,14 @@ export function readPrivateKey(keyString, passphrase, isOutputString = true) {
302
269
  throw new Error(`私钥读取失败: ${error.message}`);
303
270
  }
304
271
  }
272
+ /*export function readPrivateKey(keyString: string | Buffer, passphrase: string | undefined, isOutputString?: boolean) {
273
+ if (isString(passphrase)) {
274
+ const key = createPrivateKey({ key: keyString, format: 'pem', passphrase });
275
+ const pem = key.export({ type: 'pkcs1', format: 'pem' });
276
+ return convertToString(pem, isOutputString);
277
+ }
278
+ return keyString;
279
+ }*/
305
280
  /**
306
281
  * @desc Inline syntax sugar
307
282
  */
package/package.json CHANGED
@@ -1,87 +1,87 @@
1
- {
2
- "name": "samlesa",
3
- "version": "4.3.0",
4
- "description": "High-level API for Single Sign On (SAML 2.0) baseed on samlify ",
5
- "main": "build/index.js",
6
- "keywords": [
7
- "nodejs",
8
- "saml2",
9
- "sso",
10
- "slo",
11
- "metadata"
12
- ],
13
- "type": "module",
14
- "typings": "types/index.d.ts",
15
- "homepage": "https://saml.veclea.com",
16
- "scripts": {
17
- "build": "tsc && copyfiles -u 1 src/schema/**/* build/src",
18
- "build:fast": "tsc",
19
- "build:clean": "tsc --build --clean && pnpm run build",
20
- "docs:dev": "cd docs && npm run docs:dev",
21
- "docs:build": "cd docs && npm run docs:build",
22
- "docs:preview": "cd docs && npm run docs:preview",
23
- "docs:deploy": "vercel --prod",
24
- "lint": "tslint -p .",
25
- "lint:fix": "tslint -p . --fix",
26
- "test": "vitest run",
27
- "test:watch": "vitest",
28
- "test:coverage": "vitest run --coverage",
29
- "test:fast": "vitest run --pool=forks",
30
- "test:artifact": "vitest run test/artifact.test.ts",
31
- "generate-certs": "node scripts/generate-certs.js",
32
- "hooks:postinstall": "mklink /J .git\\hooks\\pre-commit .pre-commit.sh || copy .pre-commit.sh .git\\hooks\\pre-commit"
33
- },
34
- "exports": {
35
- ".": {
36
- "types": "./types/index.d.ts",
37
- "import": "./build/index.js"
38
- }
39
- },
40
- "files": [
41
- "build",
42
- "types"
43
- ],
44
- "contributors": [
45
- "Veclea <vemocle@gmail.com>"
46
- ],
47
- "author": "Veclea",
48
- "repository": {
49
- "url": "https://github.com/Veclea/samlify.git",
50
- "type": "git"
51
- },
52
- "bugs": {
53
- "url": "https://github.com/Veclea/samlify/issues"
54
- },
55
- "docs": "https://saml.veclea.com",
56
- "license": "MIT",
57
- "dependencies": {
58
- "@xmldom/xmldom": "^0.9.8",
59
- "axios": "^1.13.6",
60
- "camelcase": "^9.0.0",
61
- "cross-env": "^10.1.0",
62
- "iconv-lite": "^0.7.2",
63
- "ts-node": "^10.9.2",
64
- "vite-tsconfig-paths": "^6.1.1",
65
- "xml": "^1.0.1",
66
- "xml-crypto-next": "^8.0.0",
67
- "xml-encryption-next": "^5.0.0",
68
- "xml-escape": "^1.1.0",
69
- "xml2js": "^0.6.2",
70
- "xmllint-wasm": "^5.2.0",
71
- "xpath": "^0.0.34"
72
- },
73
- "devDependencies": {
74
- "@types/node": "^25.5.0",
75
- "@types/pako": "2.0.4",
76
- "@types/uuid": "11.0.0",
77
- "@vitest/coverage-istanbul": "^4.1.2",
78
- "@vitest/coverage-v8": "4.1.2",
79
- "copyfiles": "^2.4.1",
80
- "coveralls": "^3.1.1",
81
- "esbuild": "^0.27.4",
82
- "jsdom": "^29.0.1",
83
- "timekeeper": "^2.3.1",
84
- "typescript": "6.0.2",
85
- "vitest": "^4.1.2"
86
- }
87
- }
1
+ {
2
+ "name": "samlesa",
3
+ "version": "4.3.1",
4
+ "description": "High-level API for Single Sign On (SAML 2.0) baseed on samlify ",
5
+ "main": "build/index.js",
6
+ "keywords": [
7
+ "nodejs",
8
+ "saml2",
9
+ "sso",
10
+ "slo",
11
+ "metadata"
12
+ ],
13
+ "type": "module",
14
+ "typings": "types/index.d.ts",
15
+ "homepage": "https://saml.veclea.com",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./types/index.d.ts",
19
+ "import": "./build/index.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "build",
24
+ "types"
25
+ ],
26
+ "contributors": [
27
+ "Veclea <vemocle@gmail.com>"
28
+ ],
29
+ "author": "Veclea",
30
+ "repository": {
31
+ "url": "https://github.com/Veclea/samlify.git",
32
+ "type": "git"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/Veclea/samlify/issues"
36
+ },
37
+ "docs": "https://saml.veclea.com",
38
+ "license": "MIT",
39
+ "dependencies": {
40
+ "@xmldom/xmldom": "^0.9.8",
41
+ "axios": "^1.13.6",
42
+ "camelcase": "^9.0.0",
43
+ "cross-env": "^10.1.0",
44
+ "iconv-lite": "^0.7.2",
45
+ "ts-node": "^10.9.2",
46
+ "vite-tsconfig-paths": "^6.1.1",
47
+ "xml": "^1.0.1",
48
+ "xml-crypto-next": "^8.0.0",
49
+ "xml-encryption-next": "^5.0.0",
50
+ "xml-escape": "^1.1.0",
51
+ "xml2js": "^0.6.2",
52
+ "xmllint-wasm": "^5.2.0",
53
+ "xpath": "^0.0.34"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^25.5.0",
57
+ "@types/pako": "2.0.4",
58
+ "@types/uuid": "11.0.0",
59
+ "@vitest/coverage-istanbul": "^4.1.2",
60
+ "@vitest/coverage-v8": "4.1.2",
61
+ "copyfiles": "^2.4.1",
62
+ "coveralls": "^3.1.1",
63
+ "esbuild": "^0.27.4",
64
+ "jsdom": "^29.0.1",
65
+ "timekeeper": "^2.3.1",
66
+ "typescript": "6.0.2",
67
+ "vitest": "^4.1.2"
68
+ },
69
+ "scripts": {
70
+ "build": "tsc && copyfiles -u 1 src/schema/**/* build/src",
71
+ "build:fast": "tsc",
72
+ "build:clean": "tsc --build --clean && pnpm run build",
73
+ "docs:dev": "cd docs && npm run docs:dev",
74
+ "docs:build": "cd docs && npm run docs:build",
75
+ "docs:preview": "cd docs && npm run docs:preview",
76
+ "docs:deploy": "vercel --prod",
77
+ "lint": "tslint -p .",
78
+ "lint:fix": "tslint -p . --fix",
79
+ "test": "vitest run",
80
+ "test:watch": "vitest",
81
+ "test:coverage": "vitest run --coverage",
82
+ "test:fast": "vitest run --pool=forks",
83
+ "test:artifact": "vitest run test/artifact.test.ts",
84
+ "generate-certs": "node scripts/generate-certs.js",
85
+ "hooks:postinstall": "mklink /J .git\\hooks\\pre-commit .pre-commit.sh || copy .pre-commit.sh .git\\hooks\\pre-commit"
86
+ }
87
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"binding-post.d.ts","sourceRoot":"","sources":["../../src/binding-post.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAQhD,OAAO,EAAC,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAMrD;;;;;GAKG;AACH,iBAAS,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CAsE/I;AAGD;;;;;;;;;GASG;AACH,iBAAe,mBAAmB,CAAC,EAAC,WAAgB,EAAE,MAAM,EAAE,IAAS,EAAE,oBAAoB,EAAE,eAAuB,EAAE,kBAAuB,EAAE,OAAO,EAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuJ7M;AAED;;;;;;;GAOG;AACH,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,KAAA,EAAE,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CA2D1K;AAED;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CA6DvI;AAED,QAAA,MAAM,WAAW;;;;;CAKhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"binding-post.d.ts","sourceRoot":"","sources":["../../src/binding-post.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAQhD,OAAO,EAAC,yBAAyB,EAAC,MAAM,YAAY,CAAC;AAMrD;;;;;GAKG;AACH,iBAAS,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CAsE/I;AAGD;;;;;;;;;GASG;AACH,iBAAe,mBAAmB,CAAC,EAAC,WAAgB,EAAE,MAAM,EAAE,IAAS,EAAE,oBAAoB,EAAE,eAAuB,EAAE,kBAAuB,EAAE,OAAO,EAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAoJ7M;AAED;;;;;;;GAOG;AACH,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,KAAA,EAAE,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CA2D1K;AAED;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,GAAG,cAAc,CA6DvI;AAED,QAAA,MAAM,WAAW;;;;;CAKhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-sp.d.ts","sourceRoot":"","sources":["../../src/metadata-sp.ts"],"names":[],"mappings":"AAAA;;;;EAIE;AACF,OAAO,QAAQ,EAAE,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAE7D;AAeD,MAAM,CAAC,OAAO,WAAU,IAAI,EAAE,qBAAqB,cAElD;AAED;;EAEE;AACF,qBAAa,UAAW,SAAQ,QAAQ;IAEtC;;;MAGE;gBACU,IAAI,EAAE,qBAAqB;IA6NvC;;;MAGE;IACK,sBAAsB,IAAI,OAAO;IAGxC;;;MAGE;IACK,oBAAoB,IAAI,OAAO;IAGtC;;;;MAIE;IACK,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CA0L5D"}
1
+ {"version":3,"file":"metadata-sp.d.ts","sourceRoot":"","sources":["../../src/metadata-sp.ts"],"names":[],"mappings":"AAAA;;;;EAIE;AACF,OAAO,QAAQ,EAAE,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAE7D;AAeD,MAAM,CAAC,OAAO,WAAU,IAAI,EAAE,qBAAqB,cAElD;AAED;;EAEE;AACF,qBAAa,UAAW,SAAQ,QAAQ;IAEtC;;;MAGE;gBACU,IAAI,EAAE,qBAAqB;IA6NvC;;;MAGE;IACK,sBAAsB,IAAI,OAAO;IAGxC;;;MAGE;IACK,oBAAoB,IAAI,OAAO;IAGtC;;;;MAIE;IACK,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAwL5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaValidator.d.ts","sourceRoot":"","sources":["../../src/schemaValidator.ts"],"names":[],"mappings":"AAoFA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,KAAK,MAAM,EAAE,SAAQ,OAAe,qBA4BlE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,EAAE,UAAS,OAAe;;;EA+D3E,CAAC"}
1
+ {"version":3,"file":"schemaValidator.d.ts","sourceRoot":"","sources":["../../src/schemaValidator.ts"],"names":[],"mappings":"AAuHA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,KAAK,MAAM,EAAE,SAAQ,OAAe,qBA4BlE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,EAAE,UAAS,OAAe;;;EA+D3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"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"}