mdefender-pro 1.2.4 → 1.2.5
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.
- package/auto.js +62 -0
- package/bin/mdefender.js +85 -34
- package/block-page.html +56 -210
- package/client.mjs +345 -237
- package/index.js +9 -1
- package/package.json +3 -2
- package/vite.js +45 -2
package/index.js
CHANGED
|
@@ -35,7 +35,7 @@ function getDefaultTemplate() {
|
|
|
35
35
|
const DEFAULT_CONFIG = {
|
|
36
36
|
apiKey: '',
|
|
37
37
|
domain: '',
|
|
38
|
-
apiEndpoint:
|
|
38
|
+
apiEndpoint: process.env.MDEFENDER_API_ENDPOINT || 'http://localhost:8000',
|
|
39
39
|
mode: 'block', // 'block' | 'monitor' | 'off'
|
|
40
40
|
blockStatusCode: 403,
|
|
41
41
|
timeout: 10000,
|
|
@@ -292,6 +292,7 @@ function mdefender(overrides = {}) {
|
|
|
292
292
|
};
|
|
293
293
|
|
|
294
294
|
const resp = await sendAnalyzeRequest(config.apiEndpoint, config.apiKey, payload, config.timeout);
|
|
295
|
+
const result = resp && resp.data ? resp.data : {};
|
|
295
296
|
const isBlocked = Boolean(
|
|
296
297
|
result && (
|
|
297
298
|
result.decision === 'BLOCK' ||
|
|
@@ -349,4 +350,11 @@ mdefender.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
|
349
350
|
mdefender.sendAnalyzeRequest = sendAnalyzeRequest;
|
|
350
351
|
|
|
351
352
|
module.exports = mdefender;
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
const { autoHook } = require('./auto');
|
|
356
|
+
mdefender.autoHook = autoHook;
|
|
357
|
+
} catch (e) {}
|
|
358
|
+
|
|
359
|
+
|
|
352
360
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mdefender-pro",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "MDefender Pro - Web Application Firewall middleware for Node.js/Express. Protects against XSS, SQLi, CSRF, and other OWASP Top 10 attacks.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"index.js",
|
|
35
|
+
"auto.js",
|
|
35
36
|
"index.d.ts",
|
|
36
37
|
"README.md",
|
|
37
38
|
"config-loader.js",
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
],
|
|
44
45
|
"exports": {
|
|
45
46
|
".": "./index.js",
|
|
47
|
+
"./auto": "./auto.js",
|
|
46
48
|
"./client": "./client.mjs",
|
|
47
49
|
"./vite": "./vite.mjs"
|
|
48
50
|
},
|
|
@@ -50,7 +52,6 @@
|
|
|
50
52
|
"type": "git",
|
|
51
53
|
"url": "git+https://github.com/mdefender/mdefender.git"
|
|
52
54
|
},
|
|
53
|
-
"homepage": "https://mdefenderapi.onrender.com",
|
|
54
55
|
"bugs": {
|
|
55
56
|
"url": "https://github.com/mdefender/mdefender/issues"
|
|
56
57
|
}
|
package/vite.js
CHANGED
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
// vite.js - Official MDefender Pro Vite Plugin (CJS)
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
2
4
|
const mdefender = require('./index.js');
|
|
3
5
|
|
|
4
6
|
function mdefenderVite(options = {}) {
|
|
5
7
|
const middleware = mdefender(options);
|
|
8
|
+
|
|
6
9
|
return {
|
|
7
10
|
name: 'mdefender-vite-plugin',
|
|
8
11
|
configureServer(server) {
|
|
9
|
-
server.middlewares
|
|
12
|
+
if (server && server.middlewares) {
|
|
13
|
+
server.middlewares.use(middleware);
|
|
14
|
+
}
|
|
10
15
|
},
|
|
11
16
|
configurePreviewServer(server) {
|
|
12
|
-
server.middlewares
|
|
17
|
+
if (server && server.middlewares) {
|
|
18
|
+
server.middlewares.use(middleware);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
transformIndexHtml(html) {
|
|
22
|
+
const inlineGuard = [
|
|
23
|
+
'<script>',
|
|
24
|
+
'(function(){',
|
|
25
|
+
' try {',
|
|
26
|
+
' var raw = (window.location.search || "") + " " + (window.location.hash || "");',
|
|
27
|
+
' if (!raw.trim()) return;',
|
|
28
|
+
' var norm = raw;',
|
|
29
|
+
' try { norm = decodeURIComponent(norm); } catch(e){}',
|
|
30
|
+
' try { norm = decodeURIComponent(norm); } catch(e){}',
|
|
31
|
+
' var p = [',
|
|
32
|
+
' /<\\s*(?:script|iframe|object|embed|svg|img|math)\\b/i,',
|
|
33
|
+
' /\\bon(?:error|load|click|mouseover|focus|submit)\\s*=/i,',
|
|
34
|
+
' /\\b(?:javascript|data\\s*:\\s*text\\/html)\\s*:/i,',
|
|
35
|
+
' /\\b(?:alert|eval|confirm|prompt|document\\.cookie)\\s*\\(/i,',
|
|
36
|
+
' /\\bUNION\\s+(?:ALL\\s+)?SELECT\\b/i,',
|
|
37
|
+
' /(?:\'|"|\\b)\\s*(?:OR|AND)\\s+[\'"]?([a-zA-Z0-9_\\-]+)[\'"]?\\s*=\\s*[\'"]?\\1/i,',
|
|
38
|
+
' /(?:--|#|\\/\\*).*?(?:DROP|ALTER|INSERT|DELETE|UPDATE|EXEC)/i,',
|
|
39
|
+
' /(?:\\.\\.\\/|\\.\\.\\\\|etc\\/passwd|etc\\/shadow|win\\.ini|boot\\.ini)/i,',
|
|
40
|
+
' /(?:169\\.254\\.169\\.254|metadata\\.google\\.internal|=(?:https?:\\/\\/)?(?:127\\.0\\.0\\.1|169\\.254|localhost|0\\.0\\.0\\.0))/i,',
|
|
41
|
+
' /(?:;|\\||\\|\\||&&|`|\\$\\()\\s*(?:cat|ls|id|whoami|powershell|cmd|sh|bash|wget|curl)\\b/i,',
|
|
42
|
+
' /(?:ignore\\s+all\\s+(?:previous|prior)\\s+instructions|system\\s+override|DAN\\s+mode)/i',
|
|
43
|
+
' ];',
|
|
44
|
+
' for (var i = 0; i < p.length; i++) {',
|
|
45
|
+
' if (p[i].test(norm)) {',
|
|
46
|
+
' try { window.stop(); } catch(e){}',
|
|
47
|
+
' break;',
|
|
48
|
+
' }',
|
|
49
|
+
' }',
|
|
50
|
+
' } catch(e){}',
|
|
51
|
+
'})();',
|
|
52
|
+
'</script>'
|
|
53
|
+
].join('\\n');
|
|
54
|
+
|
|
55
|
+
return html.replace('<head>', '<head>\\n' + inlineGuard);
|
|
13
56
|
}
|
|
14
57
|
};
|
|
15
58
|
}
|