7 ขั้นตอน เพิ่มความปลอดภัยให้กับ JavaScript ในปี 2021

11-ส.ค.-21

คัมภีร์เทพ IT

JavaScript ถูกใช้งานอย่างแพร่หลาย มันทำงานทั้งใน Browser รวมทั้งใน Backend ของคุณด้วย อีกทั้ง JavaScript ยังเป็น Ecosystem ที่ต้องพึ่งพา 3rd Party Libraries ดังนั้น การรักษาความปลอดภัยให้กับ JavaScript จึงต้องปฏิบัติตาม Best Practices ให้ได้มากที่สุด และนี่ก็เป็น 7 ขั้นตอน เพิ่มความปลอดภัยให้กับ JavaScript ในปี 2021

1. ตรวจสอบความถูกต้องของ JavaScript

ในฐานะของ Frontend Developer คุณอาจเคยใช้ <script> Tag เพื่อ Import 3rd Party Libraries แล้วคุณเคยนึกถึงความเสี่ยงในเรื่องความปลอดภัยเมื่อต้องทำแบบนั้น บ้างหรือไม่?

คำถามที่น่าสนใจคือ จะเกิดอะไรขึ้นหาก 3rd Party Resource ถูกดัดแปลงหรือปรับเปลี่ยน?

เป็นไปได้ว่า สิ่งเหล่านี้สามารถเกิดขึ้นได้เมื่อคุณ Render External Resources บน Site ของคุณ ด้วยเหตุนี้ Site ของคุณจึงอาจมีช่องโหว่ ในเรื่องความปลอดภัย

เพื่อมาตรการด้านความปลอดภัย คุณสามารถเพิ่ม Integrity (หรือเรียกอีกอย่างว่า Subresource integrity — SRI) ให้กับ Script ของคุณ ได้ดังนี้

Integrity Attribute จะอนุญาตให้ Browsers สามารถตรวจสอบ Script ที่ Fetch มา เพื่อให้แน่ใจว่า Code ไม่เคยถูก ถูกดัดแปลงหรือปรับเปลี่ยน

หมายเหตุ: คุณต้องแน่ใจว่า Code ที่คุณ Refer ถึงในตอนแรก จะไม่มีช่องโหว่ใด ๆ

2. ทดสอบเพื่อหาช่องโหว่ของ NPM อยู่เสมอ

คุณคงรู้ว่าเราสามารถใช้คำสั่ง npm audit เพื่อตรวจหาช่องโหว่สำหรับ Dependencies ที่ถูกติดตั้งทั้งหมด มันจะ Report เพื่อแสดงช่องโหว่ต่าง ๆ และเสนอแนวทางแก้ไขให้ แต่ประเด็นคือ คุณได้ทำมันบ่อยแค่ไหน?

ช่องโหว่เหล่านี้จะเพิ่มจำนวนขึ้นเรื่อย ๆ ทำให้แก้ไขได้ยากขึ้น เว้นเสียแต่เราจะทำการ Automate มันซะ โปรดอย่าลืมว่า บางส่วนอาจทำให้เกิดปัญหา จนเกิดช่องโหว่ที่ร้ายแรงยิ่งขึ้นได้

ในเรื่องการแก้ปัญหา คุณสามารถ Run NPM ใน CI ของคุณสำหรับ Pull Request แต่ละครั้ง เพื่อระบุช่องโหว่ ดังนั้น คุณจึงสามารถป้องกันช่องโหว่ต่าง ๆ ที่อาจไม่ทันได้สังเกตเห็น

อย่างไรก็ตาม มีช่องโหว่บางอย่างที่ Developer ต้องแก้ไขด้วยตนเอง

แต่ GitHub ก็ก้าวไปอีกขั้น

เมื่อเร็ว ๆ นี้ GitHub ได้เปิดตัว Bot ที่ชื่อว่า Dependabot เพื่อ Scan NPM Dependencies โดยอัตโนมัติ และแจ้งให้คุณทราบทาง Email เพื่อบอกเกี่ยวกับความเสี่ยงที่พวกมันตรวจพบ

นอกจากนี้ สมมติว่าคุณเปิดใช้งาน “automated security fix PRs” ซึ่งในกรณีนี้ GitHub จะส่ง Automated PR เพื่อแก้ไขปัญหาเหล่านี้ โดยระบุความเสี่ยงด้านความปลอดภัยให้ล่วงหน้า

Build Share Independent Components Bit

Bit เป็น Tool ที่ช่วยเพิ่มความสามารถในการสร้าง Modular Applications อย่างถูกต้อง ด้วย Components ที่ได้รับการ Maintain, Author และ Version ที่เป็นอิสระต่อกัน

คุณสามารถใช้มันเพื่อสร้าง Apps & Design Systems, Author และส่งมอบ Micro Frontends หรือ Share Components ระหว่าง Applications

3. เปิดใช้งาน Minor และ Patch Version Updates

คุณเคยเห็นสัญลักษณ์ ^ หรือ ~ ที่อยู่หน้า NPM Package Version มาบ้างแล้วใช้หรือไม่? สัญลักษณ์เหล่านี้บ่งบอกถึง Version Bump สำหรับ Minor และ Patch Versions (ขึ้นอยู่กับสัญลักษณ์)

ในทางเทคนิคแล้ว ทั้ง Minor และ Patch Versions สามารถเข้ากันได้แบบย้อนหลัง (Backward Compatible) ซึ่งช่วยลดความเสี่ยงในการเกิด Bugs ใน Applications

เนื่องจาก 3rd Party Libraries ส่วนใหญ่ มักจะปล่อย Hot-Fixes เพื่อแก้ไขช่องโหว่เช่น Patch Version Bumps ซึ่งอย่างน้อยการเปิดใช้งาน Patch Updates แบบอัตโนมัติ จะช่วยลดความเสี่ยงด้านความปลอดภัยได้

4. อย่าลืมตรวจสอบเพื่อหลีกเลี่ยงปัญหา Injections

โดยหลักการแล้ว เราไม่ควรพึ่งพา Client-Side Validations เพียงอย่างเดียว เนื่องจาก Attackers สามารถเปลี่ยนแปลงพวกมันได้ตามต้องการ อย่างไรก็ตาม เราสามารถละเว้น JavaScript Injections บางอย่างได้ ด้วยการตรวจสอบความถูกต้อง Input ทุกตัว

อย่างเช่น หากคุณพิมพ์ข้อความใด ๆ ในช่อง Comment ด้วย <script><script/> จากนั้นพวกมันจะถูกแทนที่ด้วย <<script>><</script>> จากนั้น JavaScript Code ที่ถูกป้อนเข้าไป จะไม่ถูก Execute สิ่งนี้เรียกว่า Cross-Site Scripting (XSS)

ในทำนองเดียวกัน ยังมีวิธีอื่นๆ อีก 2-3 วิธี ในการจัดการกับ JavaScript Injections

  • ใช้ Console ของ Developer เพื่อแทรกหรือเปลี่ยน JavaScript
  • ป้อน “javascript:SCRIPT” ลงใน Address Bar

การป้องกัน JS Injections เป็นเรื่องสำคัญที่ช่วยทำให้ Application ของคุณปลอดภัย อย่างที่ได้กล่าวไว้ก่อนหน้านี้ การ Validations ถือเป็นวิธีหนึ่งในการช่วยป้องกัน ตัวอย่างเช่น ก่อนที่จะบันทึก Input ใด ๆ ลงใน Database ให้แทนที่ < ทั้งหมดด้วย &lt; และแทนที่ > ทั้งหมดด้วย &gt;

Content Security Policies (CSP) เป็นอีกวิธีหนึ่งในการหลีกเลี่ยง Injections ที่เป็นอันตราย การใช้ CSP ค่อนข้างตรงไปตรงมา ดังนี้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CSP สามารถดูได้ที่ Guidelines นี้

5. เปิดใช้ Strict Mode อยู่เสมอ

การเปิดใช้ Strict Mode จะช่วยจำกัดการเขียน Code ที่ไม่ปลอดภัยให้น้อยลงได้ นอกจากนี้ สามารถเปิดใช้งานพวกมันได้แบบตรงไปตรงมา

เมื่อเปิดใช้งาน Strict Mode:

  • มันจะแสดงข้อผิดพลาด สำหรับ Errors บางอย่างที่ก่อนหน้านี้ ไม่เคยถูกแสดงออกมา
  • มันจะช่วยแก้ไขข้อผิดพลาดที่ทำให้ JavaScript Engines ทำการเพิ่มประสิทธิภาพได้ยาก
  • งดการใช้ Reserved Words ซึ่งมีแนวโน้มที่จะถูกกำหนดไว้ใน Version ต่อ ๆ ไปของ ECMAScript
  • มันจะแสดง Errors เมื่อมีการดำเนินการบางอย่างที่ "ไม่ปลอดภัย"

6. ทำการวิเคราะห์ Code

Linters ทำการช่วยวิเคราะห์ Code ใน Codebase ของคุณ มันจะช่วยเพิ่มในเรื่องของคุณภาพและหลีกเลี่ยงข้อผิดพลาดทั่วไป สำหรับ Tools ยอดนิยมบางส่วน ที่มักจะใช้สำหรับ JavaScript มีดังนี้

  • JSLint
  • JSHint
  • ESLint

นอกจากนี้ Tool อย่าง SonarCloud ยังสามารถถูกใช้ เพื่อระบุ Code Smells และช่องโหว่ด้านความปลอดภัย โดย Report ของ Sonar จะมีลักษณะดังนี้

หมายเหตุ: ดังที่คุณเห็นในภาพด้านบน มันมี Section ของ Security ซึ่งแสดงช่องโหว่ รวมทั้ง Security Hotspots

7. ทำการ Minify และ Uglify Code

Attackers มักจะพยายามทำความเข้าใจ Code ของคุณเพื่อ Hack ข้อมูล ดังนั้น การมี Source Code ที่ Readable ใน Production Build จะเพิ่มความเสี่ยงในการถูกโจมตีได้ 

ตามแนวทางปฏิบัติทั่วไป หากคุณทำการ Minify และ Uglify JavaScript Code ของคุณ มันจะทำให้ยากที่จะใช้ประโยชน์จากช่องโหว่ใน Code ที่คุณเขียน

อย่างไรก็ตาม หากคุณต้องการมาตรการที่เข้มข้นในการซ่อน Code ของคุณจาก Users/Clients คุณก็ควรเก็บมันไว้ที่ Server-Side โดยไม่ส่งไปยัง Browser

ที่มา: https://blog.bitsrc.io/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด