การรักษาความปลอดภัย APIs ในโปรเจ็กต์ Node.js และ MySQL
APIs เป็นแกนหลักของแอปพลิเคชันบนเว็บและมือถือสมัยใหม่ เมื่อสร้าง API ด้วย Node.js และ MySQL การรักษาความปลอดภัยจะต้องมีความสำคัญสูงสุด คู่มือนี้ครอบคลุมแนวทางปฏิบัติที่ดีที่สุดที่จำเป็นและตัวอย่างโค้ดเพื่อช่วยคุณรักษาความปลอดภัย API ของคุณ
API สถาปัตยกรรมความปลอดภัย
แผนภาพนี้แสดงแนวทางแบบเลเยอร์ในการรักษาความปลอดภัย API รวมถึงเกตเวย์, WAF, การตรวจสอบสิทธิ์ และการป้องกันฐานข้อมูล
API เกตเวย์ & WAF
ใช้เกตเวย์ API และไฟร์วอลล์แอปพลิเคชันเว็บ (WAF) เพื่อรวมศูนย์ความปลอดภัย การจำกัดอัตรา และขอการตรวจสอบความถูกต้อง ซึ่งจะช่วยบล็อกการรับส่งข้อมูลที่เป็นอันตรายก่อนที่จะเข้าถึงแอป Node.js ของคุณ
ผู้ใช้ไปยัง DB Flow
แผนภาพนี้แสดงโฟลว์ที่ปลอดภัยจากผู้ใช้ไปยังฐานข้อมูล พร้อมด้วยการตรวจสอบการรับรองความถูกต้องและการอนุญาตในแต่ละขั้นตอน
1. ใช้ HTTPS ทุกที่
ให้บริการ API ของคุณผ่าน HTTPS เสมอเพื่อเข้ารหัสข้อมูลระหว่างทาง ใช้letsencryptหรือใบรับรอง SSL เชิงพาณิชย์
2. การรับรองความถูกต้องและการอนุญาต
- JWT (JSON Web Tokens):ใช้ JWT สำหรับการตรวจสอบสิทธิ์แบบไร้สัญชาติ ออกโทเค็นเมื่อเข้าสู่ระบบและตรวจสอบพวกเขาในแต่ละคำขอ
- การควบคุมการเข้าถึงตามบทบาท (RBAC):จำกัดการเข้าถึงปลายทางที่ละเอียดอ่อนตามบทบาทของผู้ใช้
// Example: JWT middleware
const jwt = require('jsonwebtoken');
function authenticateToken(req, res, next) {
const token = req.headers['authorization']?.split(' ')[1];
if (!token) return res.sendStatus(401);
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}3. ป้องกันการฉีด SQL
ใช้คำสั่งแบบกำหนดพารามิเตอร์หรือไลบรารี ORM (เช่น Sequelize หรือ Knex) เสมอเพื่อป้องกันการฉีด SQL
// Using mysql2 with placeholders
const [rows] = await db.execute('SELECT * FROM users WHERE id = ?', [userId]);4. การตรวจสอบอินพุตและการฆ่าเชื้อ
ตรวจสอบและฆ่าเชื้อข้อมูลขาเข้าทั้งหมดโดยใช้ไลบรารี เช่นexpress-validatorหรือjoi
5. รักษาความปลอดภัยข้อมูลที่ละเอียดอ่อน
- ห้ามเก็บรหัสผ่านที่เป็นข้อความธรรมดา แฮชด้วย
bcryptเสมอ - จัดเก็บความลับ (ข้อมูลประจำตัว DB, ความลับ JWT) ในตัวแปรสภาพแวดล้อม ไม่ใช่ในโค้ด
6. การจำกัดอัตราและการควบคุม
ปกป้อง API ของคุณจากการโจมตีแบบ brute-force และ DDoS โดยใช้มิดเดิลแวร์ที่จำกัดอัตรา เช่นexpress-rate-limit
7. การบันทึกและการตรวจสอบ
บันทึกความพยายามและข้อผิดพลาดในการตรวจสอบความถูกต้องทั้งหมด ใช้เครื่องมือตรวจสอบเพื่อตรวจจับกิจกรรมที่น่าสงสัย
8. อัปเดตการพึ่งพา
อยู่เสมออัปเดต Node.js, MySQL และการอ้างอิงทั้งหมดเป็นประจำเพื่อแก้ไขช่องโหว่ที่ทราบ