Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

[แปล] ความรู้พื้นฐานเกี่ยวกับ Web Application Security 

$
0
0

websecuritybasics

websecuritybasics จากบทความเรื่อง The Basics of Web Application Security ได้ทำการอธิบายเกี่ยวกับการพัฒนา web application อย่างไรให้มีความปลอดภัย โดยเน้นไปที่พื้นฐานของการพัฒนา ซึ่งมีความน่าสนใจและสำคัญอย่างมาก สำหรับ developer หน้าใหม่และประสบการณ์ยังไม่เยอะ ดังนั้น จึงทำการแปลและสรุปส่วนที่น่าสนใจไว้นิดหน่อย มาเริ่มกันเลย

ในการพัฒนา web application นั้น มีสิ่งที่ท้าทายเยอะมาก

ความท้าทายในอันดับต้น ๆ ก็คือ เรื่องความปลอดภัย (Security) แต่บ่อยครั้งที่มักถูกหลงลืม หรือ ปล่อยปละละเลยไป !! เรื่องของการพัฒนา web application ให้มีความปลอดภัยนั้น มีเทคนิค หรือ วิธีการมากมายทั้งยากและง่าย แต่ก่อนอื่น Developer ควรเรียนรู้และทำความเข้าใจกับพื้นฐานก่อน เช่น เรื่องการตรวจสอบ input เป็นต้น Developer บางคนอาจจะบอกว่า แค่พัฒนาระบบให้เสร็จตามความต้องการของลูกค้าก็ยากอยู่แล้ว ให้ระบบทำงานรวดเร็วก็ยากขึ้นไปอีก ไหนจะต้องเขียน code ให้ดีอีก ไหนจะต้องเขียน code ให้รองรับการขยายอีก ไหนจะต้อง .... ไหนจะต้องเรื่องความน่าเชื่อถือ ไหนจะต้องเรื่องความเสถียร … มันเยอะไปหมดเลย ส่วนเรื่องของความปลอดภัยมันมักจะอยู่ท้าย ๆ ของ requirment มักถูกละเลย ไม่สนใจ แต่เมื่อใดก็ตามระบบงานมันทำงานผิดพลาด หรือไม่เป็นไปทำที่เราต้องการ เมื่อนั้นแหละ เรื่องความปลอดภัยมันจะสำคัญอย่างมาก ถ้าไม่โดนกับตัวเอง จะไม่รู้สึก และ เข้าใจ !!

ก่อนอื่นต้องเข้าใจก่อนว่า

เรื่องของความปลอดภัยคือ เรื่องของความไว้ใจล้วน ๆ ลองถามตัวเองสิว่า
  • คุณไว้ใจข้อมูลที่ส่งมาจากผู้ใช้งานว่าถูกต้องเสมอหรือไม่ ?
  • คุณไว้ใจว่าการเชื่อมต่อระหว่างระบบกับผู้ใช้งานจะไม่ถูกดักฟัง หรือ ขโมย ?
  • คุณไว้ใจระบบของคุณว่าข้อมูลต่าง ๆ มันถูกต้อง และ ปลอดภัยหรือไม่ ?
เชื่อได้เลยว่า คุณไม่ค่อยมั่นใจว่าจะไว้ใจได้ !!! เรื่องพวกนี้คือ ความเสี่ยงล้วน ๆ (Risk) ดังนั้นในฐานะของ Developer ต้องลดความเสี่ยงเหล่านี้ลงไป ให้ได้มากที่สุด

สิ่งแรกที่ Developer ทุกคนควรทำก็คือ การจัดการกับข้อมูลเข้า (Input)

ต้องทำการปฏิเสธข้อมูลที่ไม่เป็นไปตามที่ระบบต้องการ หรือ คาดหวังเสมอ Developer บางคนบอกว่า เราทำการตรวจสอบข้อมูลต่าง ๆ จากผู้ใช้งานด้วย JavaScript นะ แต่ในมุมมองของความปลอดภัยแล้ว บอกได้เลยว่า มันไม่มีประโยชน์อะไรเลย เพราะว่า ผู้ใช้งานเพียงปิด JavaScript หรือ ทำการจำลอง request การส่งข้อมูลมายัง server เพียงเท่านี้ JavaScript ก็หมดความหมายไปในทันที ให้เริ่มด้วยการอย่าไว้ใจข้อมูลเข้า (Input) ใด ๆ ทั้งสิ้น HTTPS ก็ช่วยอะไรไม่ได้นะครับ มันคนละเรื่อง ดังนั้น ฝั่ง server ต้องทำการตรวจสอบข้อมูลเข้าเสมอ ลองถามตัวเราเองสิว่า วันนี้ทำการตรวจสอบข้อมูลเข้ากันหรือยัง เช่น
  • ชนิดของข้อมูลมันตรงตามที่ต้องการหรือไม่ ?
  • รูปแบบข้อมูลตรงตามที่ต้องการหรือไม่ ?
  • ข้อมูลมันส่งผลกระทบต่อการประมวลผลของระบบหรือไม่ ?
  • ข้อมูลมีขนาดใหญ่เกินที่ต้องการหรือไม่ ?
ถ้ายัง รีบกลับไปแก้ไขได้เลย !! เพื่อลดปัญหา และ ลดอันตรายต่าง ๆ ที่จะเกิดขึ้นต่อระบบ นั่นคือ เรื่องของ Input Validation นั่นเอง มันไม่ใช่เรื่องใหม่เลยนะ แต่มักละเลยกันอย่างมาก !!!

Input Validation คืออะไรกัน ?

เป็นกระบวนการเพื่อทำให้มั่นใจว่าข้อมูลเข้า ยังคงเข้ากันได้กับระบบงาน และทำให้ระบบทำงานได้ตรงตามที่คาดหวัง แต่ถ้าข้อมูลเหล่านี้มันผิดปกติ หรือ ไม่เข้ากับการทำงานของระบบ มันย่อมทำให้เกิดผลลัพธ์ที่ไม่เป็นดังหวังเช่นกัน วิธีการตรวสอบข้อมูลเข้ามีหลากหลายวิธีซึ่งมีแนวทางดังนี้ เริ่มจาก Input validation เพื่อตรวจสอบข้อมูลตามชนิดที่ต้องการ เพื่อตรวจสอบข้อมูลตามช่วงที่ต้องการ ตัวอย่างเช่นข้อมูลราคาสินค้า ควรที่จะมีชนิดเป็นตัวเลข ควรที่จะมีค่าไม่ติดลบ ต่อมาเป็นวิธีการกำหนดขอบเขต หรือ จำกัดรูปแบบของข้อมูล เรียกว่า Whitelist หรือ positive validation เช่น
  • รูปแบบของวันที่
  • รูปแบบของ URL
  • ขนาดความยาวสูงสุดของข้อมูล
  • อักขระพิเศษที่อนุญาต
แต่ถ้าจำนวนของ Whitelist มันเยอะมาก ๆ แนะนำให้เปลี่ยนเป็น Blacklist หรือ negative validation ซะ
จากนั้นพูดถึง feedback หรือ การบอกผู้ใช้งานให้รับรู้ ผลลัพธ์การตรวจสอบข้อมูลเข้าที่ไม่เป็นไปตามความต้องการ มีทางเลือกคือ
  • แสดงผลการตรวจสอบทั้งหมด
  • ไม่แสดงผลการตรวจสอบ
  • แสดงข้อมูลแบบกลาง ๆ ไม่ลงรายละเอียด
จะเลือกทางไหน มันขึ้นอยู่กับความต้องการของแต่ละระบบ แต่อย่างหนึ่งที่ต้องมีคือ เขียนและบันทึกผลการทำงานต่าง ๆ ลงใน logging และ monitoring เสมอ อีกข้อควรระวัง คือ การนำข้อมูลเข้ามาแสดงให้ผู้ใช้งานเห็น ต้องทำการกรองข้อมูล และ ทำความสะอาดข้อมูลก่อนเสมอ มิเช่นนั้นมันก็จะกลายเป็นภัย หรือช่องโหว่ให้โจมตีระบบได้อีก เรามักจะเรียกว่า XSS attack (Cross Site Scripting) นั่นเอง

โดยในปัจจุบันเรื่องของ Input Validation มันไม่ยาก (แต่ไม่ค่อยทำกัน !!)

เนื่องจากมีชุด library และ framework ให้ใช้งานมากมาย ยกตัวอย่างเช่น
  • Java มี Hibernate Validation และ Spring Bean Validation
  • Ruby On Rails ก็มี Active Record Validator มาให้ใช้เลย
  • Node.js มี validator-js
ส่วนวิธีการพื้นฐานสุด ๆ มันก็คือ Regular expression ซึ่ง developer ควรมีความรู้ความเข้าใจนะ

สุดท้ายแล้วฝากไว้ว่า

if you don't control it, you can't trust it. If it violates the contract, reject it!
วันนี้ Developer รู้เรื่องการพัฒนา web ให้ปลอดภัยกันหรือยัง ? ถ้ายัง เริ่มได้แล้วนะครับ
ข้อมูลเพิ่มเติมแนะนำที่

Viewing all articles
Browse latest Browse all 1997

Trending Articles