1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| const express = require('express'); const bodyParser = require('body-parser'); const session = require('express-session'); const multer = require('multer'); const { VM } = require('vm2'); const crypto = require('crypto'); const path = require('path');
const app = express();
app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'public')));
const sessionSecret = crypto.randomBytes(64).toString('hex'); app.use(session({ secret: sessionSecret, resave: false, saveUninitialized: true, })); const upload = multer(); app.post('/login', (req, res) => { const { username, passwd } = req.body;
if (username.toLowerCase() !== 'syclover' && username.toUpperCase() === 'SYCLOVER' && passwd === 'J1rrY') { req.session.isAuthenticated = true; res.json({ message: 'Login successful' }); } else { res.status(401).json({ message: 'Invalid credentials' }); } });
const isAuthenticated = (req, res, next) => { if (req.session.isAuthenticated) { next(); } else { res.status(403).json({ message: 'Not authenticated' }); } }; app.post('/execute', isAuthenticated, upload.none(), (req, res) => { let code = req.body.code;
let flag = false; for (let i = 0; i < code.length; i++) { if (flag || "/(abcdefghijklmnopqrstuvwxyz123456789'\".".split``.some(v => v === code[i])) { flag = true; code = code.slice(0, i) + "*" + code.slice(i + 1, code.length); } } try {
const vm = new VM({ sandbox: { require: undefined, setTimeout: undefined, setInterval: undefined, clearTimeout: undefined, clearInterval: undefined, console: console } }); const result = vm.run(code.toString()); console.log('执行结果:', result); res.json({ message: '代码执行成功', result: result });
} catch (e) {
console.error('执行错误:', e); res.status(500).json({ error: '代码执行出错', details: e.message }); } }); app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); process.on('uncaughtException', (err) => { console.error('捕获到未处理的异常:', err); }); process.on('unhandledRejection', (reason, promise) => { console.error('捕获到未处理的 Promise 错误:', reason); }); setTimeout(() => { throw new Error("模拟的错误"); }, 1000); setTimeout(() => { Promise.reject(new Error("模拟的 Promise 错误")); }, 2000);
app.listen(3000, () => { console.log('Server is running on port 3000'); });
|