[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-js2go-ep49-backend-security-authentication-authorization-validation-all--*":3,"academy-blog-translations-q6au12trb7ipmxx":85},{"data":4,"page":84,"perPage":84,"totalItems":84,"totalPages":84},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":78,"keywords":79,"locale":54,"published_at":80,"scheduled_at":13,"school_blog":76,"short_description":81,"slug":82,"status":74,"title":6,"updated":83,"updated_by":13,"views":77},"JS2GO EP.49 Security สำหรับ Backend ด้วย Go และ Node.js","sclblg987654321","school_blog_translations","\u003Cp>การสร้างระบบที่ “ปลอดภัยตั้งแต่วันแรก” ไม่ใช่การรอแก้ตอนข้อมูลรั่ว หรือระบบโดนเจาะ\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ระบบ Backend ที่ดี ไม่ได้วัดกันแค่ว่า เร็วแค่ไหน แต่ต้องตอบคำถามสำคัญเหล่านี้ให้ได้อย่างมั่นใจ\u003C\u002Fp>\u003Cul>\u003Cli>ใครกำลังเรียก API นี้?\u003C\u002Fli>\u003Cli>เขามีสิทธิ์ทำสิ่งนั้นจริงหรือไม่?\u003C\u002Fli>\u003Cli>ข้อมูลที่ส่งเข้ามาปลอดภัยหรือยัง?\u003C\u002Fli>\u003Cli>ระบบรับมือกับการโจมตีพื้นฐานได้หรือไม่?\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>บทความนี้จะพาคุณเข้าใจ Security Core ที่ทุกระบบ Production ต้องมี ทั้งฝั่ง Go และ Node.js\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 1. Authentication vs Authorization (ต้องแยกให้ชัด)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>หลายระบบพังเพราะ เอาสองอย่างนี้มาปนกัน\u003C\u002Fp>\u003Cfigure class=\"table\">\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>เรื่อง\u003C\u002Fth>\u003Cth>ความหมาย\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Authentication (AuthN)\u003C\u002Ftd>\u003Ctd>คุณคือใคร?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Authorization (AuthZ)\u003C\u002Ftd>\u003Ctd>คุณทำอะไรได้บ้าง?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ตัวอย่าง\u003C\u002Fh3>\u003Cul>\u003Cli>Login สำเร็จ → Authentication ผ่าน\u003C\u002Fli>\u003Cli>เข้าหน้า Admin ไม่ได้ → Authorization ไม่ผ่าน\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cblockquote>\u003Cp>❗ AuthN ผ่าน ≠ มีสิทธิ์ทำทุกอย่าง\u003Cbr>สองเรื่องนี้ต้องออกแบบแยกกันเสมอ\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 2. Authentication Methods ที่ใช้จริงใน Production\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 2.1 JWT (JSON Web Token)\u003C\u002Fh3>\u003Cp>เหมาะกับ\u003C\u002Fp>\u003Cul>\u003Cli>REST API\u003C\u002Fli>\u003Cli>Mobile App\u003C\u002Fli>\u003Cli>Microservices\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>คุณสมบัติ\u003C\u002Fp>\u003Cul>\u003Cli>Stateless\u003C\u002Fli>\u003Cli>ส่ง token มากับทุก request\u003C\u002Fli>\u003Cli>Scale ง่าย ไม่ต้องเก็บ session\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Flow\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">Login → JWT → Authorization: Bearer &lt;token&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch4>Go (Fiber) JWT Middleware (แนวคิดที่ถูกต้อง)\u003C\u002Fh4>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">func AuthMiddleware(c *fiber.Ctx) error {\n    header := c.Get(\"Authorization\")\n    if header == \"\" {\n        return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{\n            \"error\": \"missing token\",\n        })\n    }\n\n    \u002F\u002F Parse + verify JWT (signature, exp, iss)\n    \u002F\u002F set user info into context\n    return c.Next()\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch4>Node.js (Express)\u003C\u002Fh4>\u003Cpre>\u003Ccode class=\"language-plaintext language-js\">function auth(req, res, next) {\n  const header = req.headers.authorization;\n  if (!header) {\n    return res.status(401).json({ error: \"missing token\" });\n  }\n\n  \u002F\u002F verify JWT\n  next();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ข้อควรระวัง\u003C\u002Fp>\u003Cul>\u003Cli>ต้องตรวจ \u003Ccode inline=\"\">exp\u003C\u002Fcode>, \u003Ccode inline=\"\">iss\u003C\u002Fcode>, \u003Ccode inline=\"\">aud\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>อย่า trust payload โดยไม่ verify signature\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 2.2 Session-based Authentication\u003C\u002Fh3>\u003Cp>เหมาะกับ\u003C\u002Fp>\u003Cul>\u003Cli>Web Application\u003C\u002Fli>\u003Cli>Server-rendered app\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ลักษณะ\u003C\u002Fp>\u003Cul>\u003Cli>Stateful\u003C\u002Fli>\u003Cli>Server เก็บ session\u003C\u002Fli>\u003Cli>Client ใช้ cookie\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Production ต้องตั้งค่า\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ccode inline=\"\">HttpOnly\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode inline=\"\">Secure\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode inline=\"\">SameSite=Strict | Lax\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 2.3 OAuth 2.0 \u002F OpenID Connect\u003C\u002Fh3>\u003Cp>เหมาะกับ\u003C\u002Fp>\u003Cul>\u003Cli>Login ด้วย Google \u002F GitHub\u003C\u002Fli>\u003Cli>Third-party integration\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ข้อดี\u003C\u002Fp>\u003Cul>\u003Cli>ระบบไม่ต้องเก็บ password\u003C\u002Fli>\u003Cli>ลดความเสี่ยงจาก credential leak\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 3. Authorization &amp; RBAC (Role-Based Access Control)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>RBAC = ควบคุมสิทธิ์ตาม “บทบาท”\u003C\u002Fp>\u003Cfigure class=\"table\">\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Role\u003C\u002Fth>\u003Cth>สิทธิ์\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>user\u003C\u002Ftd>\u003Ctd>อ่านข้อมูล\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>editor\u003C\u002Ftd>\u003Ctd>แก้ไข\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>admin\u003C\u002Ftd>\u003Ctd>จัดการทุกอย่าง\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Go (Fiber)\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">func RequireRole(role string) fiber.Handler {\n    return func(c *fiber.Ctx) error {\n        if c.Locals(\"role\") != role {\n            return c.Status(403).SendString(\"Forbidden\")\n        }\n        return c.Next()\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Node.js (Express)\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-js\">function requireRole(role) {\n  return (req, res, next) =&gt; {\n    if (req.user.role !== role) {\n      return res.status(403).send(\"Forbidden\");\n    }\n    next();\n  };\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cblockquote>\u003Cp>✔ AuthN = ใคร\u003Cbr>✔ AuthZ = สิทธิ์\u003Cbr>อย่ารวมสองอย่างไว้ใน middleware เดียว\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 4. Input Validation ด่านแรกของความปลอดภัย\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cblockquote>\u003Cp>❌ อย่าเชื่อข้อมูลจาก client เด็ดขาด\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ข้อมูลที่ไม่ validate นำไปสู่\u003C\u002Fp>\u003Cul>\u003Cli>SQL Injection\u003C\u002Fli>\u003Cli>XSS\u003C\u002Fli>\u003Cli>Logic Bug\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Go (Validator)\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">type CreateUserRequest struct {\n    Email string `validate:\"required,email\"`\n    Age   int    `validate:\"gte=18\"`\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ใช้ \u003Ccode inline=\"\">go-playground\u002Fvalidator\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>Node.js (express-validator)\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-js\">app.post(\n  \"\u002Fuser\",\n  body(\"email\").isEmail(),\n  body(\"age\").isInt({ min: 18 }),\n  handler\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 5. ป้องกันการโจมตีที่พบบ่อย\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔥 5.1 SQL Injection\u003C\u002Fh3>\u003Cp>❌ อันตราย\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext language-sql\">SELECT * FROM users WHERE email = '${email}'\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>✅ ปลอดภัย\u003C\u002Fp>\u003Cul>\u003Cli>Prepared Statement\u003C\u002Fli>\u003Cli>ORM \u002F Query Builder\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔥 5.2 XSS (Cross-Site Scripting)\u003C\u002Fh3>\u003Cp>ป้องกันด้วย\u003C\u002Fp>\u003Cul>\u003Cli>Escape output\u003C\u002Fli>\u003Cli>ไม่ render HTML จาก user\u003C\u002Fli>\u003Cli>ใช้ Content Security Policy (CSP)\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔥 5.3 CSRF\u003C\u002Fh3>\u003Cp>ป้องกันด้วย\u003C\u002Fp>\u003Cul>\u003Cli>CSRF Token\u003C\u002Fli>\u003Cli>SameSite Cookie\u003C\u002Fli>\u003Cli>ตรวจ Origin \u002F Referer\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 6. Security Best Practices (Production Checklist)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>✔ Hash password ด้วย bcrypt \u002F argon2\u003Cbr>✔ ห้าม log password \u002F token\u003Cbr>✔ HTTPS เท่านั้น\u003Cbr>✔ Rate limit (กัน brute-force)\u003Cbr>✔ Secret ผ่าน environment variable\u003Cbr>✔ Rotate token \u002F secret\u003Cbr>✔ Principle of Least Privilege\u003Cbr>✔ แยก role ชัดเจน\u003Cbr>✔ ตรวจ dependency vulnerability (npm audit \u002F govulncheck)\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>⭐ 7. Security Architecture (ภาพรวม)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">Client\n → Authentication\n   → Authorization (RBAC)\n     → Input Validation\n       → Business Logic\n         → Database\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cblockquote>\u003Cp>Security ที่ดี = หลายชั้น\u003Cbr>ไม่ใช่หวังพึ่ง layer เดียว\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>&nbsp;\u003C\u002Fp>\u003Chr>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>📌 สรุป\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Security ไม่ใช่ feature เสริม แต่คือ รากฐานของระบบ Production\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ถ้าคุณออกแบบ\u003C\u002Fp>\u003Cul>\u003Cli>Authentication ถูก\u003C\u002Fli>\u003Cli>Authorization ชัด\u003C\u002Fli>\u003Cli>Validation ครบ\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>คุณจะ\u003C\u002Fp>\u003Cul>\u003Cli>ลดความเสี่ยงอย่างมหาศาล\u003C\u002Fli>\u003Cli>ไม่ต้องไล่แพตช์ตอนโดนโจมตี\u003C\u002Fli>\u003Cli>ระบบอยู่รอดในระยะยาวจริง\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>🔵 ตอนต่อไป (ตอนสุดท้ายของซีรีส์): EP.50 Deploy Application: Go vs Node.js (Production Guide)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cul>\u003Cli>Build &amp; Deploy\u003C\u002Fli>\u003Cli>Docker \u002F Multi-stage\u003C\u002Fli>\u003Cli>Secrets &amp; Environment\u003C\u002Fli>\u003Cli>CI\u002FCD\u003C\u002Fli>\u003Cli>Zero-downtime\u003C\u002Fli>\u003Cli>Production Checklist\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cdiv class=\"raw-html-embed\">\u003Cdiv style=\"margin:0 0 6px 0; font-weight:700;\">อ่านบทความ Series อื่นๆ:\u003C\u002Fdiv>\n\u003Cul style=\"list-style:none; padding:0; margin:0; line-height:1.4;\">\n  \u003Cli style=\"margin:0;\">\u003Ca href=\"\u002Fblogs\u002Fcategories\u002FGolang\" title=\"Golang The Series\">Golang The Series\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli style=\"margin:0;\">\u003Ca href=\"\u002Fblogs\u002Fcategories\u002FJS2GO\" title=\"JS2GO\">JS2GO\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli style=\"margin:0;\">\u003Ca href=\"\u002Fblogs\u002Fcategories\u002FTailwind%20CSS\" title=\"10 Ep ที่จะให้คุณเป็นมือโปร Tailwind CSS ในชั่วข้ามคืน\">10 Ep ที่จะให้คุณเป็นมือโปร Tailwind CSS ในชั่วข้ามคืน\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\u003C\u002Fdiv>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cdiv class=\"raw-html-embed\">\n  \u003Cp style=\"margin:0 0 6px 0;\">\u003Cstrong>Follow Us:\u003C\u002Fstrong>\u003C\u002Fp>\n  \u003Cul style=\"list-style:none; padding:0; margin:0; line-height: 0.4;\">\n    \u003Cli style=\"display:flex; align-items:center; gap:6px; margin:0;\">\n      \n      \u003Csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#1877F2\" aria-hidden=\"true\">\n        \u003Cpath d=\"M22 12.07C22 6.48 17.52 2 11.93 2S2 6.48 2 12.07c0 5 3.66 9.14 8.44 9.93v-7.02H7.9v-2.91h2.54V9.41c0-2.5 1.49-3.88 3.77-3.88 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.77-1.63 1.56v1.87h2.78l-.44 2.91h-2.34V22c4.78-.79 8.44-4.93 8.44-9.93Z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Ca href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\" target=\"_blank\" rel=\"nofollow noopener\" title=\"Follow Superdev Academy on Facebook\">Facebook: Superdev Academy\u003C\u002Fa>\n    \u003C\u002Fli>\n\n    \u003Cli style=\"display:flex; align-items:center; gap:6px; margin:0;\">\n      \n      \u003Csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#FF0000\" aria-hidden=\"true\">\n        \u003Cpath d=\"M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.5 12 3.5 12 3.5s-7.5 0-9.4.6A3 3 0 0 0 .5 6.2 31.5 31.5 0 0 0 0 12a31.5 31.5 0 0 0 .5 5.8 3 3 0 0 0 2.1 2.1c1.9.6 9.4.6 9.4.6s7.5 0 9.4-.6a3 3 0 0 0 2.1-2.1A31.5 31.5 0 0 0 24 12a31.5 31.5 0 0 0-.5-5.8ZM9.75 15.02V8.98L15.5 12l-5.75 3.02Z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002F@SuperdevAcademy\" target=\"_blank\" rel=\"nofollow noopener\" title=\"Watch on YouTube\">YouTube: Superdev Academy\u003C\u002Fa>\n    \u003C\u002Fli>\n\n    \u003Cli style=\"display:flex; align-items:center; gap:6px; margin:0;\">\n      \n      \u003Csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#E4405F\" aria-hidden=\"true\">\n        \u003Cpath d=\"M7 2h10a5 5 0 0 1 5 5v10a5 5 0 0 1-5 5H7a5 5 0 0 1-5-5V7a5 5 0 0 1 5-5Zm10 2H7a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3Zm-5 3.5A5.5 5.5 0 1 1 6.5 13 5.5 5.5 0 0 1 12 7.5Zm0 2A3.5 3.5 0 1 0 15.5 13 3.5 3.5 0 0 0 12 9.5Zm5.75-2.75a1.25 1.25 0 1 1-1.25 1.25 1.25 1.25 0 0 1 1.25-1.25Z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Ca href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevacademy\u002F?hl=en target=\" _blank\"=\"\" rel=\"nofollow noopener\" title=\"See behind-the-scenes on Instagram\">Instagram: Superdev Academy\u003C\u002Fa>\n    \u003C\u002Fli>\n\n    \u003Cli style=\"display:flex; align-items:center; gap:6px; margin:0;\">\n      \n      \u003Csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#000000\" aria-hidden=\"true\">\n        \u003Cpath d=\"M21 8.12a6.86 6.86 0 0 1-4.8-2V16a6 6 0 1 1-6-6 5.9 5.9 0 0 1 1.63.23V8.05a9.08 9.08 0 0 1-1.63-.15V4.5a6.86 6.86 0 0 0 4.8 2.05V6.5a6.86 6.86 0 0 0 4.8 1.62ZM9.2 12.5A3.5 3.5 0 1 0 12.7 16V9.94a6 6 0 0 1-1.63-.27v3.95a3.5 3.5 0 0 1-1.87 3.17 3.5 3.5 0 0 1-4.78-3.23 3.5 3.5 0 0 1 4.78-3.06Z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Ca href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy\" target=\"_blank\" rel=\"nofollow noopener\" title=\"Watch short tips on TikTok\">TikTok: @superdevacademy\u003C\u002Fa>\n    \u003C\u002Fli>\n\n    \u003Cli style=\"display:flex; align-items:center; gap:6px; margin:0;\">\n      \n      \u003Csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#111827\" aria-hidden=\"true\">\n        \u003Cpath d=\"M12 2a10 10 0 1 0 10 10A10.01 10.01 0 0 0 12 2Zm6.93 6h-3.26a15.6 15.6 0 0 0-1.39-3.62A8.03 8.03 0 0 1 18.93 8ZM12 4c.73.93 1.7 2.74 2.2 4H9.8C10.3 6.74 11.27 4.93 12 4ZM8.72 4.38A15.6 15.6 0 0 0 7.32 8H4.07a8.03 8.03 0 0 1 4.65-3.62ZM4.07 16h3.25a15.6 15.6 0 0 0 1.4 3.62A8.03 8.03 0 0 1 4.07 16ZM12 20c-.73-.93-1.7-2.74-2.2-4h4.4C13.7 17.26 12.73 19.07 12 20Zm3.28-.38A15.6 15.6 0 0 0 16.68 16h3.25a8.03 8.03 0 0 1-4.65 3.62ZM20 14h-3.54a13.8 13.8 0 0 1-.26-4H20a7.98 7.98 0 0 1 0 4Zm-12.2 0H4a7.98 7.98 0 0 1 0-4h3.54a13.8 13.8 0 0 1-.26 4Zm2 .5h4.4a17.8 17.8 0 0 1-.72-4.5c0-1.58.25-3.1.72-4.5H9.8a17.8 17.8 0 0 1 .72 4.5c0 1.58-.25 3.1-.72 4.5Z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Ca href=\"https:\u002F\u002Fwww.superdevacademy.com\u002F\" target=\"_blank\" rel=\"noopener\" title=\"Visit the official website of Superdev Academy\">Official Website: Superdev Academy.com\u003C\u002Fa>\n    \u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Fdiv>\u003Cp>&nbsp;\u003C\u002Fp>","cover_image_js2_go_ep_49_backend_security_with_go_and_node_3l4haf828s.js.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fik5ueoh4be7ojlt\u002Fcover_image_js2_go_ep_49_backend_security_with_go_and_node_3l4haf828s.js.webp","2026-03-04 08:44:53.727Z","",{"keywords":15,"locale":48,"school_blog":58},[16,23,28,33,38,43],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:44:52.376Z","7kgkxt1b9xd0cca","Authorization","2026-04-10 16:12:51.107Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:34:18.095Z","z3u3nql685g5e3b","Authentication","2026-04-10 16:08:11.664Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:44:53.062Z","puutdnxuitnxxgq","Backend","2026-04-10 16:12:51.264Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:44:52.790Z","tkf1l5rauw0t7m0","Secure API Design","2026-04-10 16:12:51.172Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:24:40.405Z","05u3tysava2z6ga","Node.js","2026-04-10 16:07:29.504Z",{"collectionId":17,"collectionName":18,"created":44,"created_by":13,"id":45,"name":46,"updated":47,"updated_by":13},"2026-03-04 08:20:11.547Z","ey3puyme01a9bsw","Go","2026-04-10 16:07:25.893Z",{"code":49,"collectionId":50,"collectionName":51,"created":52,"flag":53,"id":54,"is_default":55,"label":56,"updated":57},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":59,"collectionId":60,"collectionName":61,"expand":62,"id":76,"views":77},"hsa1afr8fcnd6qb","pbc_2105096300","school_blogs",{"category":63},{"blogIds":64,"collectionId":65,"collectionName":66,"created":67,"created_by":13,"id":59,"image":68,"image_alt":13,"image_path":69,"label":70,"name":71,"priority":72,"publish_at":73,"scheduled_at":13,"status":74,"updated":75,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:24:37.986Z","js2_go_2_11zon_y6paxmuz32.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fhsa1afr8fcnd6qb\u002Fjs2_go_2_11zon_y6paxmuz32.webp",{"en":71,"th":71},"JS2GO",10,"2025-08-11 03:41:08.820Z","published","2026-04-25 02:32:14.339Z","q6au12trb7ipmxx",246,"ik5ueoh4be7ojlt",[20,25,30,35,40,45],"2025-12-24 10:19:35.052Z","สรุปพื้นฐาน Security ที่ระบบ Backend ต้องมี ตั้งแต่ Authentication Authorization และ Data Validation พร้อมแนวทางใช้งานจริงใน Go และ Node.js สำหรับระบบ Production","js2go-ep49-backend-security-authentication-authorization-validation","2026-04-25 02:47:47.184Z",1,{"th":82}]