
ข้อมูลลับหายไปจริงหรือเปล่า? สิ่งที่ Git ไม่ได้บอกคุณตรงๆ
ในโลกของการพัฒนาซอฟต์แวร์ การจัดการ ข้อมูลลับ เช่น API key, รหัสผ่าน หรือ Credential ต่างๆ เป็นเรื่องสำคัญมาก หลายคนอาจเคยพลาดเผลอใส่ข้อมูลเหล่านี้เข้าไปใน Git repository โดยไม่ตั้งใจ
พอรู้ตัวว่าทำพลาด ก็รีบกลับไปลบข้อมูลนั้นออกทันที คิดว่าทุกอย่างจบ ข้อมูลลับหายไปจาก โปรเจกต์ แล้ว
แต่ความจริงแล้ว สิ่งที่เกิดขึ้นอาจตรงกันข้ามกับที่คิด เพราะ ข้อมูลลับ เหล่านั้นไม่ได้หายไปไหน มันยังคงซ่อนตัวอยู่ใน ประวัติการแก้ไข ของ Git ที่มองไม่เห็นต่างหาก
ความเข้าใจผิดเรื่องการลบข้อมูลลับใน Git
หลายคนเชื่อว่าเมื่อลบไฟล์ที่มี API key หรือลบบรรทัดที่มี Secret ออกจากโค้ด แล้วคอมมิตการเปลี่ยนแปลงไป ข้อมูลลับก็จะหายไปจาก ประวัติของโปรเจกต์ อย่างถาวร
แนวคิดนี้เป็นเรื่องเข้าใจผิดอย่างร้ายแรง
เพราะ Git ถูกออกแบบมาให้เก็บ ทุกการเปลี่ยนแปลง ของโค้ดไว้เสมอ เมื่อคอมมิตข้อมูลลับเข้าไปในตอนแรก Git ก็จะบันทึก สแนปชอต (snapshot) ของโปรเจกต์ ณ ตอนนั้นเอาไว้ ซึ่งรวมถึงข้อมูลลับด้วย
จากนั้นเมื่อลบข้อมูลลับออกแล้วคอมมิตอีกครั้ง Git ก็จะบันทึก สแนปชอต ใหม่ แต่สแนปชอตแรกที่ยังมีข้อมูลลับอยู่ก็ยังคงอยู่ใน ประวัติของ Git ไม่ได้ถูกลบไปไหน
นั่นหมายความว่า ใครก็ตามที่เข้าถึง Repository ของคุณ ไม่ว่าจะเป็น เพื่อนร่วมงาน หรือแม้แต่ แฮกเกอร์ ก็สามารถย้อนกลับไปดู ประวัติการคอมมิต เก่าๆ แล้วค้นหา ข้อมูลลับ ที่คิดว่าลบไปแล้วเจอได้ง่ายๆ
ความเสี่ยงนี้ยิ่งทวีคูณเมื่อเป็น Public Repository เพราะข้อมูลลับอาจถูกเปิดเผยสู่สาธารณะโดยไม่ตั้งใจ ซึ่งนำไปสู่ความเสียหายร้ายแรงต่อ ระบบ หรือ องค์กร ได้เลย
ป้องกันอย่างไรไม่ให้ข้อมูลลับรั่วไหล
การป้องกันข้อมูลลับไม่ให้รั่วไหลเป็นสิ่งสำคัญที่นักพัฒนาทุกคนควรตระหนัก
วิธีที่ดีที่สุดคือ อย่าใส่ข้อมูลลับลงใน Git Repository ตั้งแต่แรก
ควรใช้วิธีอื่นในการจัดการกับ Secret เหล่านี้ เช่น การใช้ Environment Variables ที่ตั้งค่าบนเซิร์ฟเวอร์หรือเครื่องคอมพิวเตอร์ ทำให้โค้ดเรียกใช้ได้โดยไม่ต้องฝังในไฟล์โปรเจกต์โดยตรง
หรือใช้ไฟล์คอนฟิกเฉพาะที่ไม่ถูกติดตามโดย Git โดยการเพิ่มชื่อไฟล์นั้นๆ เข้าไปในไฟล์ .gitignore เพื่อให้ Git ทราบว่าไม่ควรติดตามการเปลี่ยนแปลงของไฟล์นั้น
สำหรับกรณีที่เผลอคอมมิตข้อมูลลับเข้าไปแล้วจริงๆ และต้องการลบออกจาก ประวัติ Git อย่างถาวร ต้องใช้วิธีที่ซับซ้อนขึ้น
นั่นคือการ Rewrite Git History หรือการเขียนประวัติของ Git ใหม่ทั้งหมด
เครื่องมืออย่าง git filter-repo หรือ BFG Repo-Cleaner สามารถช่วยลบไฟล์หรือข้อมูลที่ต้องการออกจากประวัติการคอมมิตทั้งหมดได้
แต่การทำเช่นนี้ต้องทำอย่างระมัดระวัง และควรทำเมื่อจำเป็นจริงๆ เท่านั้น เพราะการเขียนประวัติใหม่จะส่งผลกระทบต่อ Repository ที่ใช้ร่วมกันทั้งหมด
และที่สำคัญที่สุด หาก ข้อมูลลับ ใดๆ ถูกคอมมิตลงใน Git แล้ว และคิดว่ามันอาจรั่วไหลออกไป
สิ่งแรกที่ต้องทำคือ ถือว่าข้อมูลลับนั้นถูกบุกรุกไปแล้ว
ต้องรีบ ยกเลิก (Invalidate) ข้อมูลลับตัวเก่าทันที และ สร้างใหม่ (Rotate) เพื่อให้แน่ใจว่าตัวเก่าไม่สามารถใช้งานได้อีกต่อไป ป้องกันความเสียหายที่อาจเกิดขึ้นตามมา
การมีสติและรอบคอบในการจัดการกับ ข้อมูลลับ คือหัวใจสำคัญในการรักษาความปลอดภัยของ โปรเจกต์ และ ระบบ ในระยะยาว