Bảy lỗ hổng hay gặp nhất trong một Node.js API, kèm cách bịt:
- SQL injection (OWASP A03):
db.query('SELECT * FROM users WHERE id = ' + req.params.id)— attacker truyền1 OR 1=1là dump sạch DB. Sửa bằng parameterized querydb.query('SELECT * FROM users WHERE id = $1', [id])hoặc dùng ORM. - NoSQL injection (MongoDB): query
{ username: req.body.username }với body{ username: { $gt: '' } }là qua mặt được auth. Sửa bằng validate với Zod/Joi trước khi query. - XSS (A07): lưu
<script>alert(1)</script>vào DB rồi render không escape là mất cookie người dùng. Sửa bằng escape output, CSP header, DOMPurify. - ReDoS:
/(a+)+/.test(userInput)với input'aaaaaaaaab'gây backtracking hàm mũ, block event loop hàng giây. Sửa bằng packagesafe-regexđể soát pattern và đặt timeout cho regex. - Directory traversal:
fs.readFile('/uploads/' + req.query.file)vớifile=../../etc/passwd. Sửa bằngpath.resolve()rồi kiểm tra kết quả có nằm trong thư mục cho phép không. - Prototype pollution:
obj[userKey] = userValuevới key__proto__làm hỏng Object prototype. Sửa bằngObject.create(null)cho plain object và validate key. - Dependency vulnerabilities:
npm audit+npm audit fix, thêmsnykvào CI/CD.
Cuối cùng, app.use(helmet()) chỉ một dòng nhưng set luôn 11 security header (X-Frame-Options, HSTS, CSP cơ bản, nosniff).