รวบรวม ExpressJs Middleware ที่ควรใช้สำหรับมือใหม่สาย Full Stack Dev

ช่วงนี้ถือได้ว่า JavaScript มาแรงมา บริษัทต่างๆ ก็เริ่มหันมาใช้ MEAN ในการทำเว็บแอฟพลิเคชั่นมากขึ้น ผมเองก็เป็นหนึ่งใน Full Stack Developer คนนึง ในบทความนี้เลยจะมาแนะนำ Middleware/Module ที่ควรจะใช้หากคุณทำใช้ ExpressJS เป็น Back-End เรามาดูกันครับว่ามีอะไรน่าสนใจบ้าง

Express application generator [Github]

แนะนำเลยครับ ตัวนี่เป็นเป็น Automatic Build Structure ครับ สะดวกดีครับ มันจะทำการสร้างโฟรเดอร์ให้เราหมดเลย มาดูตัวยอย่างกัน

การติดตั่งก็ผ่าน NPM ปกติครับ

ติดตั่งเสร็จเรียกใช้คำสั่ง

สร้างโฟรเดอร์สำหรับเว็บเรา

การติดตั่ง Dependencies ให้กับเว็บเรา

รันเว็บที่เราสร้างไว้ ดูผลการทำงานให้เข้าไปที่ http://localhost:3000/

 

(Recommend) Body parser [Github]

ตัวนี้ไว้ทำให้เว็บเราอ่านและส่งค่าของ Body ได้นะครับ ไม่งั่นเราจะส่งค่าใดๆ ไปให้ Express เราแล้วมันจะ error ขึ้นมา จำเป็นต้องติดตั่งเสมอ 

วิธีติดตั่ง

การเรียกใช้

 

(Recommend) Compression [Github]

เป็นอีกหนึ่งตัวที่จำเป็นเหมือนกันถ้าใครต้องการเพิ่มประสิทธิภาพ ความเร็วในการทำงานของเว็บเรา เพราะตัวนี้จะช่วยในการลดขนาดของ request/response body ด้วย gzip ให้กับเราครับ ทำให้ขนาดของการส่งค่าลดลงทำให้เว็บไวขึ้นได้ครับ

วิธีติดตั่ง

วิธีใช้ก็ง่ายมากถ้าเราต้องการจะลดขนาดในทุกๆ request/response

**ข้อควรจำ: ต้องเอา compression ไว้บรรทัดบนสุดเสมอนะครับ ดูตามตัวอย่างด้านบนจะห็นได้ว่าเขียนไว้ก่อนที่จะเรียก express สะอีก จากนั่นก็ค่อยเรียกโมดูลตัวอ่นตามปกติครับ อย่าลืมเรียกต่อจาก express นะครับ ตามลำดับ

 

(Recommend) Cookie parser [Github]

ตัวนี้จะคล้ายๆ body-parser แต่จะไว้ใช้งานกับ cookie แทนนะครับ ไว้รับส่งค่าเหมือนกัน

วิธีติดตั่ง

การใช้งาน ก็ลองยิงผ่าน curl ดูแบบนี้  curl http://127.0.0.1:8080 –cookie “Cho=Kim;Greet=Hello” จากโค้ดด้านล่างเราก็จะได้ค่าที่ส่งไปออกมา

 

(Recommend) Express session [Github]

ปกติเราจะทำระบบล็อกอิน หรือเก็บข้อมูลผู้ใช้งานเรามักจะใช้ session ใครเคยเขียน PHP , JSP หรือภาษาทางฝั่ง Back-End มาคงจะเข้าใจเรื่องนี้ ผมเชื่อว่าคนที่หัดมาเขียน Node ส่วนมากจะมาจากสายพวกนี้อยู่แล้ว แต่ถ้าใครยังไม่เข้าใจเรื่อง session ให้แนะนำว่าไปอ่านก่อน cookie, session ให้เข้าใจก่อน

จริงผมต้องแนะนำให้ใช้ cookie-session แต่ตัวนี้ผู้ผลิตแนะนำให้ใช้ express-session เพราะว่าตัว cookie-session มีปัญหานิดหน่อยคือ ปกติบราวเซอร์จะกำหนดว่า 1 domain ต้องไม่เกิน 50 cookie และขนาดรวมกันต้องไม่เกิน 4093** bytes ต่อ domain ถ้าเกินกว่าที่กำหนดบราวเซอร์จะปฏิเสธการทำงานกับ cookie ไปทันที (อ่านเพิมเติมที่นี่) ดังนั่นการใช้ cookie-session ผมจึงแนะนำว่าให้ตั่งเวลา cookie น้อยๆ จะได้หมดเวลาไวๆ หรือเป็นไปได้ควรไปใช้ express-session แทน

วิธีติดตั่ง

วิธีใช้แนะนำให้ไปอ่านใน github แทนเพราะผมคงอธิบายไม่เข้าใจแน่ แต่ให้ลองดูจากตัวอย่างแอพข้างล่างแทนละกัน **ข้อควรจำ ปกติแล้วต้องใช้คู่กับ cookie-parser แต่ express-session ตั่งแต่ 1.5.0 ไม่ต้องแล้วใช้แค่ express-session ได้เลย 

ตัวอย่างการใช้งานสองแบบ

  • มาดูแบบแรกแบบที่ยังใช้คู่กับ cookie-parser อยู่ ที่นี่
  • แบบที่สองแบบไม่ต้องใช้ cookie-parser แล้ว ที่นี่

 

(Recommend) csurf [Github]

อธิบายเพิ่มเติมเกี่ยวกับ CSURF นิดนึงนะครับ  มันย่อมาจาก Cross Site Request Forgery (CSRF) เป็นการโจมตีเว็บไซต์แบบนึงที่นิยมทั่วไปในปัจจุบันนะครับ โดยการโจมตีแบบนี้จะเป็นการบังคับให้บราวเซอร์ของเหยื่อส่ง HTTP Request ซึึ่งมันถูกปรับแต่งค่าบางอย่าง อาจจะรวมไปถึง session, cookie ด้วยก็ได้  ผมแนะนำให้ไปอ่านเพิ่มเติมที่ OWASP นะครับ คงอธิบายได้คราวๆ เท่านี้เดียวจะยาวไป

วิธีป้องกัน csurf ที่นิยมกันที่สุดเห็นจะเป็นวิธีการสุ่มค่าโดยหลักการจะประมาณว่า สร้างค่าสุ่มเพื่อยืนยันการใช้งานว่าเป็นการใช้งานของผู้ใช้จริง โดยในตัวฟอร์มที่สร้างขึ้นมา จะมีการแทรกค่าสุ่มขึ้นมาเป็นแบบซ่อนเอาไว้ภายใน และเวลาที่มีการ POST ฟอร์มจะนำค่าที่ซ่อนไว้นี้มาตรวจสอบอีกครั้งว่าเป็นค่าที่สุ่มออกไปเพื่อผู้ใช้คนที่กำลังส่งแบบฟอร์มจริงหรือไม่ วิธีนี้เรียกว่า Synchronizer Token Pattern เป็นวิธีที่ OWASP แนะนำเลยครับ

วิธีติดตั่ง

การเรียกใช้งานเราก็ทำการ render view ให้กับ user เมื่อเข้ามาที่ /form และส่งค่า random กลับไป

ในตัว view ก็เอาค่า csurf มาแปะไว้ใน input แบบ hidden เมื่อเราทำการกด submit ก็เอาค่านี้ไปเช็คว่าตรงกับฝั่ง server ไหม

เราลองมาดูตัวอย่างแบบอื่นดูบ้างครับ  StackOverFlow , Tutorial: CSRF for Express 4.x , 4 Simple Steps to Secure Your Express Node Application

หลักๆ ที่ผมแนะนำก็คงมีประมาณนี้ครับ ที่จำเป็นจริงๆ และยังมีอีกเยอะเลยผมคงเขียนให้ไม่หมด แต่จะให้ลิ้งไปอ่านต่อแทนละกันครับ ท้ายบทความเลย ไว้ครั่งหน้าจะหาอะไรมาให้อ่านอีกนะครับ

Module อื่นๆ ที่แนะนำ

 

Facebook Comments