ข้ามไปยังเนื้อหา

บล็อก

การรักษาความปลอดภัย API ในโครงการ Node.js และ MySQL: แนวทางปฏิบัติที่ดีที่สุดและตัวอย่างรหัส

แนวทางปฏิบัติที่ดีที่สุดสำหรับการรักษาความปลอดภัย API ใน Node.js และ MySQL

  • อ่าน 2 นาที
  • Updated

การรักษาความปลอดภัย APIs ในโปรเจ็กต์ Node.js และ MySQL

API เลเยอร์ความปลอดภัยไคลเอ็นต์เบราว์เซอร์/แอปTLSHTTPS1.3🔒อัตราตัวจำกัดDDoSการป้องกัน🛡️การตรวจสอบสิทธิ์JWTตรวจสอบRBAC🔑อินพุตการตรวจสอบฆ่าเชื้อJoi/Zod✅SQLParamเตรียมคำสั่ง🗃️MySQLฐานข้อมูลการป้องกันเชิงลึก: แต่ละเลเยอร์ป้องกันคลาสการโจมตีไม่มีเลเยอร์เดียวที่เพียงพอ — การรักษาความปลอดภัยต้องการให้ทุกเลเยอร์ทำงานร่วมกันเลเยอร์ 1เลเยอร์ 2เลเยอร์ 3เลเยอร์ 4เลเยอร์ 5เข้ารหัสการรับส่งข้อมูลทั้งหมดบล็อกเดรัจฉานการโจมตีแบบแรงตรวจสอบตัวตนป้องกันXSS / ฉีดป้องกันSQL ฉีด
API Security Diagram

APIs เป็นแกนหลักของแอปพลิเคชันบนเว็บและมือถือสมัยใหม่ เมื่อสร้าง API ด้วย Node.js และ MySQL การรักษาความปลอดภัยจะต้องมีความสำคัญสูงสุด คู่มือนี้ครอบคลุมแนวทางปฏิบัติที่ดีที่สุดที่จำเป็นและตัวอย่างโค้ดเพื่อช่วยคุณรักษาความปลอดภัย API ของคุณ

API สถาปัตยกรรมความปลอดภัย

API Security Architecture

แผนภาพนี้แสดงแนวทางแบบเลเยอร์ในการรักษาความปลอดภัย API รวมถึงเกตเวย์, WAF, การตรวจสอบสิทธิ์ และการป้องกันฐานข้อมูล

API เกตเวย์ & WAF

API Gateway and WAF

ใช้เกตเวย์ API และไฟร์วอลล์แอปพลิเคชันเว็บ (WAF) เพื่อรวมศูนย์ความปลอดภัย การจำกัดอัตรา และขอการตรวจสอบความถูกต้อง ซึ่งจะช่วยบล็อกการรับส่งข้อมูลที่เป็นอันตรายก่อนที่จะเข้าถึงแอป Node.js ของคุณ

ผู้ใช้

ไปยัง DB Flow

User to 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

OWASP ภัยคุกคามยอดนิยม& การป้องกันSQL การฉีดการสืบค้นที่เป็นอันตรายการสืบค้นแบบกำหนดพารามิเตอร์คำสั่งที่เตรียมไว้ & ORMการตรวจสอบสิทธิ์ที่ใช้งานไม่ได้ข้อมูลประจำตัวที่อ่อนแอJWT + MFA + bcryptการหมุนโทเค็น & การแฮชXSSการฉีดสคริปต์การฆ่าเชื้ออินพุตส่วนหัว CSP & amp; การหลบหนีSSRFการเข้าถึงภายในURL รายการที่อนุญาตการแบ่งส่วนเครือข่ายการกำหนดค่าไม่ถูกต้องค่าเริ่มต้น การตั้งค่าการรักษาความปลอดภัยHelmet.js & amp; การตรวจสอบทุกภัยคุกคามมีการป้องกัน - ใช้ทุกเลเยอร์เพื่อการป้องกันที่สมบูรณ์ขึ้นอยู่กับ OWASP ความเสี่ยงด้านความปลอดภัยของเว็บแอปพลิเคชัน 10 อันดับแรก

ใช้คำสั่งแบบกำหนดพารามิเตอร์หรือไลบรารี 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 และการอ้างอิงทั้งหมดเป็นประจำเพื่อแก้ไขช่องโหว่ที่ทราบ

อ่านเพิ่มเติม

Related reading. For an explainable edge Web Application Firewall on TenthMatrix WSL Proxy, see the WAF blog, the technical article, or wslproxy.org.