ทีมพัฒนาซอฟต์แวร์ต่างประเทศแก้ปัญหา SQL Injection แบบ DIY ทำให้ผู้ใช้ชื่อ Seth, Amanda และ George ถูกบล็อก

ทีมชุมชน BigGo
ทีมพัฒนาซอฟต์แวร์ต่างประเทศแก้ปัญหา SQL Injection แบบ DIY ทำให้ผู้ใช้ชื่อ Seth, Amanda และ George ถูกบล็อก

โปรเจกต์ outsourcing ซอฟต์แวร์แห่งหนึ่งเผยให้เห็นถึงอันตรายของการสร้างระบบรักษาความปลอดภัยแบบ homemade เมื่อทีมพัฒนาต่างประเทศสร้างระบบป้องกัน SQL injection ขึ้นเอง แต่กลับบล็อกผู้ใช้ที่มีชื่อทั่วไปบางชื่อโดยไม่ตั้งใจ เหตุการณ์นี้เน้นย้ำถึงความกังวลที่เพิ่มขึ้นเกี่ยวกับคุณภาพและความเสี่ยงด้านความปลอดภัยที่เกี่ยวข้องกับงานพัฒนาแบบ offshore

แนวทางรักษาความปลอดภัยที่มีข้อบกพร่อง

แทนที่จะปฏิบัติตามมาตรฐานอุตสาหกรรมในการป้องกันการโจมตีแบบ SQL injection ทีมต่างประเทศได้พัฒนาระบบกรองแบบกำหนดเองที่สแกนข้อมูลที่ผู้ใช้ป้อนเข้ามาเพื่อหาคำสำคัญ SQL ที่น่าสงสัย โซลูชันของพวกเขาบล็อกข้อความใดๆ ที่มีคำเช่น select, update, delete และที่สำคัญคือ set ซึ่งอธิบายได้ว่าทำไมผู้ใช้ชื่อ Seth จึงไม่สามารถใช้ระบบได้ ในทำนองเดียวกัน Amanda และ George ถูกบล็อกเพราะชื่อของพวกเขามี and และ or ตามลำดับ ซึ่งเป็น SQL operators ทั่วไปที่ filter ตีความว่าเป็นอันตราย

SQL injection เป็นการโจมตีทางไซเบอร์ประเภทหนึ่งที่มีการแทรกโค้ดที่เป็นอันตรายเข้าไปใน database queries ผ่านช่องป้อนข้อมูลของผู้ใช้

ชื่อที่ถูกบล็อกและเหตุผล:

  • Seth → มี "set" (คำสั่ง SQL)
  • Amanda → มี "and" (ตัวดำเนินการ SQL)
  • George → มี "or" (ตัวดำเนินการ SQL)

เหตุใดโซลูชันที่เหมาะสมจึงสำคัญ

ชุมชนนักพัฒนาเน้นย้ำว่าการกรองแบบอิงคำสำคัญประเภทนี้แสดงถึงความเข้าใจผิดพื้นฐานเกี่ยวกับหลักการรักษาความปลอดภัย แอปพลิเคชันสมัยใหม่ควรใช้ parameterized statements หรือ prepared queries ซึ่งแยกข้อมูลผู้ใช้ออกจากคำสั่ง SQL โดยสิ้นเชิง แนวทางนี้ช่วยขจัดความจำเป็นในการกรองที่ซับซ้อนในขณะที่ให้การป้องกันการโจมตีที่แข็งแกร่งกว่ามาก

แนวทางการใช้ custom filter แสดงให้เห็นสิ่งที่ผู้เชี่ยวชาญด้านความปลอดภัยเรียกว่าการแก้ไขจากภายนอกแทนที่จะจัดการกับสาเหตุรากเหง้า สิ่งนี้สร้างความรู้สึกปลอดภัยที่เป็นเท็จในขณะที่ก่อให้เกิดปัญหาใหม่ ดังที่เห็นได้จากการเลือกปฏิบัติต่อผู้ใช้ที่มีชื่อบางชื่อ

คำสั่ง SQL ที่ถูกกรองโดยระบบที่มีข้อบกพร่อง:

  • การดำเนินการฐานข้อมูล: create, database, table, insert, update, delete, drop, truncate
  • การดำเนินการสืบค้น: select, where, or, and, values, set
  • การดำเนินการอื่นๆ: rename, replace, handler

ต้นทุนที่ซ่อนอยู่ของการพัฒนาราคาถูก

กรณีศึกษานี้สะท้อนปัญหาที่กว้างขึ้นของการ outsourcing งานพัฒนาโดยอิงจากการประหยัดต้นทุนเป็นหลัก แม้ว่าทีมต่างประเทศจะเรียกเก็บเงินน้อยกว่าครึ่งหนึ่งของอัตรารายชั่วโมงของนักพัฒนาภายใน แต่ในที่สุดพวกเขากลับเรียกเก็บเงินมากกว่าสามเท่าของชั่วโมงที่ประเมินไว้ โปรเจกต์ต้องการงานเพิ่มเติมอย่างมากจากทีมพัฒนาเดิมเพื่อระบุและแก้ไขปัญหา

คนขี้เหนียวต้องจ่ายสองเท่า ผมสงสัยว่าต้นทุนของโปรเจกต์ 'ต่างประเทศ' นี้อาจง่ายๆ ที่จะมีค่าใช้จ่าย 20 เท่าของราคาสติกเกอร์ที่ต่ำมาก

เหตุการณ์นี้เน้นย้ำว่าการ outsourcing ที่ประสบความสำเร็จต้องการมากกว่าแค่อัตรารายชั่วโมงที่ต่ำกว่า มันต้องการการสื่อสารที่ชัดเจน การกำกับดูแลทางเทคนิคที่เหมาะสม และนักพัฒนาที่เข้าใจหลักการรักษาความปลอดภัยพื้นฐาน เมื่อองค์ประกอบเหล่านี้หายไป การประหยัดต้นทุนที่คาดหวังสามารถกลายเป็นความล้มเหลวที่มีราคาแพงซึ่งต้องการการทำงานใหม่ทั้งหมดได้อย่างรวดเร็ว

ผลกระทบต่อต้นทุนโครงการ:

  • อัตราค่าจ้างรายชั่วโมงต่างประเทศ: น้อยกว่า 50% ของนักพัฒนาภายในองค์กร
  • การเรียกเก็บเงินจริง: 3 เท่าของชั่วโมงที่ประเมินไว้
  • การแก้ไขปัญหาขั้นสุดท้าย: ต้องการการเข้ามาช่วยเหลือจากทีมภายในองค์กร

บทเรียนสำหรับโปรเจกต์ในอนาคต

เรื่องราวนี้เป็นเครื่องเตือนใจว่าความปลอดภัยไม่สามารถเป็นเรื่องที่คิดทีหลังหรือสิ่งที่ต้องมาแต่งเติม ไม่ว่าจะทำงานกับทีมภายในหรือผู้รับเหมาภายนอก องค์กรต้องมั่นใจว่าแนวปฏิบัติด้านความปลอดภัยพื้นฐานได้รับการทำความเข้าใจและนำไปใช้อย่างถูกต้องตั้งแต่เริ่มต้น ต้นทุนของการแก้ไขปัญหาความปลอดภัยภายหลัง ทั้งในแง่ของเงินและประสบการณ์ผู้ใช้ นั้นเกินกว่าการลงทุนในการทำสิ่งต่างๆ ให้ถูกต้องตั้งแต่แรก

Reference: INJECTION REJECTION