6 ความเสี่ยงด้านความปลอดภัยของแบ็กเอนด์บนเว็บที่ต้องพิจารณาในการพัฒนา

ใช้มาตรการในการพัฒนาเพื่อเสริมความแข็งแกร่งและทำให้เว็บแบ็กเอนด์ของคุณปลอดภัย.


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

การโจมตีทางเว็บที่อันตรายที่สุดคือการโจมตีที่เกิดขึ้นบนฝั่งเซิร์ฟเวอร์ที่จัดเก็บและวิเคราะห์ข้อมูล.

แบ็คเอนด์คืออะไร?

แอปพลิเคชันเว็บแบ่งออกเป็นสองส่วน – ส่วนหน้าและส่วนหลัง.

  • ส่วนหน้าเป็นฝั่งไคลเอ็นต์เป็นส่วนที่ผู้ใช้โต้ตอบ โดยทั่วไปแล้วจะสร้างด้วย HTML, CSS และ Javascript.
  • แบ็กเอนด์เป็นฝั่งเซิร์ฟเวอร์ โดยทั่วไปแล้วแอปพลิเคชันทำงานอย่างไรใช้ตรรกะทางธุรกิจการเปลี่ยนแปลงและการอัปเดต กลุ่มเทคโนโลยีด้านเซิร์ฟเวอร์ที่ได้รับความนิยม ได้แก่ PHP, NodeJS, Java, Ruby, C, Python, ฐานข้อมูล, ความปลอดภัย (การพิสูจน์ตัวตน, การควบคุมการเข้าถึงเป็นต้น) โครงสร้างและการจัดการเนื้อหา.

เตือนเล็กน้อยก่อนที่เราจะเริ่ม – การรับรองความถูกต้องการควบคุมการเข้าถึง & การจัดการเซสชั่น

เป็นเรื่องปกติที่เราจะสับสนข้อกำหนด ดังนั้นขอให้ชี้แจงอย่างรวดเร็ว:

  • การรับรองความถูกต้องเกี่ยวข้องกับการพิสูจน์ตัวตนของผู้ใช้ (เช่นรหัสผ่านชื่อผู้ใช้คำถามความปลอดภัยลายนิ้วมือ)
  • การควบคุมการเข้าถึงเกี่ยวข้องกับสิ่งที่ผู้ใช้สามารถเข้าถึงแอปพลิเคชัน มันบังคับใช้นโยบายที่ผู้ใช้ไม่สามารถกระทำนอกสิทธิ์ที่กำหนดไว้.
  • การจัดการเซสชั่นเกี่ยวข้องกับการตอบสนองและการร้องขอการทำธุรกรรมที่เกี่ยวข้องกับผู้ใช้เดียวกัน เป็นกลไกการแลกเปลี่ยนที่ใช้ระหว่างผู้ใช้และแอปพลิเคชันหลังจากที่เขารับรองความถูกต้องเรียบร้อยแล้ว.

มาสำรวจสิ่งต่อไปนี้เพื่อความปลอดภัยของเว็บแบ็กเอนด์ที่ดีขึ้น.

ข้อบกพร่องในการฉีด

นับตั้งแต่ปี 2010 OSWAP ได้จัดให้มีการฉีดเป็นอันดับหนึ่งที่มีความเสี่ยงต่อแอปพลิเคชั่นเว็บที่อันตรายที่สุด.

ข้อบกพร่องในการฉีดทำให้ผู้ใช้สามารถให้ข้อมูลที่มีคำหลักที่จะปรับเปลี่ยนพฤติกรรมของแบบสอบถามที่สร้างขึ้นบนฐานข้อมูล ตัวอย่างเช่นสมมติว่าเรามีสคริปต์ SQL ที่ตรวจสอบว่ามีรายการที่ตรงกันในฐานข้อมูลหรือไม่.

uname = request.POST [‘ชื่อผู้ใช้’]
passwd = request.POST [‘รหัสผ่าน’]
sql = "เลือก id จากผู้ใช้ WHERE username = ‘" + uname + "’AND password =’" + passwd + "’"
database.execute (SQL)

ผู้โจมตีสามารถจัดการฟิลด์รหัสผ่านโดยใช้การฉีด SQL ตัวอย่างเช่นโดยการป้อนรหัสผ่าน ‘OR 1 =’ 1 ซึ่งนำไปสู่การสืบค้น SQL ต่อไปนี้:

sql = "SELECT id จากผู้ใช้ WHERE ชื่อผู้ใช้ = ” และรหัสผ่าน = ‘รหัสผ่าน’ หรือ 1 = ‘1’

ด้วยการทำเช่นนั้นผู้โจมตีสามารถเข้าถึงตารางผู้ใช้ทั้งหมดของฐานข้อมูลรหัสผ่านที่ถูกต้องเสมอ (1 = ‘1’) หากพวกเขาเข้าสู่ระบบในฐานะผู้ดูแลระบบพวกเขาสามารถทำการเปลี่ยนแปลงใด ๆ ที่เขาต้องการ.

วิธีป้องกัน?

มันดีมาก ง่าย เพื่อหลีกเลี่ยงข้อบกพร่องในการฉีด.

วิธีที่ดีที่สุดและง่ายที่สุดในการตรวจสอบว่าไม่มีข้อบกพร่องในการฉีดคือการทบทวนซอร์สโค้ดแบบแมนนวลเพื่อตรวจสอบว่าการสืบค้นในฐานข้อมูลนั้นกระทำผ่านข้อความที่เตรียมไว้หรือไม่ นอกจากนี้คุณยังสามารถใช้เครื่องมือเพื่อตรวจหาช่องโหว่.

และคุณควรทำสิ่งต่อไปนี้.

  • ใช้ ORMs (เครื่องมือสร้างแผนที่วัตถุสัมพันธ์).
  • หนีอินพุตทั้งหมด ฟิลด์วันที่ไม่ควรมีสิ่งอื่นใดเก็บไว้ในนั้นยกเว้นวันที่.
  • แยกข้อมูลของคุณเพื่อให้เฉพาะสิ่งที่ควรเข้าถึงได้จากตำแหน่งที่กำหนดไว้จะถูกเก็บไว้ในตำแหน่งนั้น.
  • เขียนรหัสข้อผิดพลาดในการจัดการที่ดี อย่าสร้างฐานข้อมูลหรือแบ็กเอนด์ของคุณอย่างละเอียดเกินไป.

ทรอยล่า มีหลักสูตรที่ยอดเยี่ยมเกี่ยวกับการฉีด SQL หากสนใจคุณสามารถสำรวจได้.

การรับรองความถูกต้องที่ใช้งานไม่ได้

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

การรับรองความถูกต้องที่ใช้งานไม่ได้เกิดขึ้นส่วนใหญ่โดยสามรูปแบบ

  • สิ่งที่น่าเชื่อถือ: โดยที่ผู้โจมตีมีรายการชื่อผู้ใช้และรหัสผ่านที่ถูกต้องและสามารถทำการโจมตีโดยอัตโนมัติเพื่อกำหนดข้อมูลประจำตัวที่ถูกต้อง.
  • โจมตี Bruteforce: ที่แอปพลิเคชันอนุญาตให้ใช้รหัสผ่านที่อ่อนแอสำหรับผู้ใช้หรือผู้ดูแลระบบ.
  • การจี้เซสชัน: แอปพลิเคชันเปิดเผย ID เซสชัน URL หรือไม่หมุนหลังจากลงชื่อเข้าใช้.

ในทุกกรณีผู้โจมตีสามารถเข้าถึงบัญชีที่สำคัญและขึ้นอยู่กับธุรกิจที่อาจทำให้เกิดการฟอกเงินการโจรกรรมข้อมูลส่วนตัวหรือเปิดเผยข้อมูลที่ได้รับการคุ้มครองตามกฎหมายและมีความอ่อนไหวสูง.

วิธีป้องกัน?

ก่อนที่จะนำระบบตรวจสอบสิทธิ์ไปใช้ให้ถามตัวเองว่าผู้โจมตีจะทำอะไรได้หากระบบรับรองความถูกต้องถูกบุกรุก?

และตามการตอบสนองคุณสามารถทำสิ่งต่อไปนี้.

  • ใช้การรับรองความถูกต้องแบบหลายปัจจัยเพื่อป้องกันการโจมตีอัตโนมัติ.
  • ส่งเสริม (หรือบังคับ) ผู้ใช้ให้ยอมรับนโยบายรหัสผ่านที่ดี.
  • การ จำกัด การเข้าสู่ระบบล้มเหลว.
  • ใช้แฮชอัลกอริทึมที่มีประสิทธิภาพ เมื่อเลือกอัลกอริทึมให้พิจารณาความยาวรหัสผ่านสูงสุด.
  • ทดสอบระบบหมดเวลาของเซสชันและตรวจสอบให้แน่ใจว่าโทเค็นเซสชันไม่ถูกต้องหลังจากออกจากระบบ.

การควบคุมการเข้าถึงที่ใช้งานไม่ได้

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

ข้อบกพร่องการควบคุมการเข้าถึงทั่วไป ได้แก่ :

  • การกำหนดค่าผิดพลาดของ CORS ที่อนุญาตการเข้าถึง API ที่ไม่ได้รับอนุญาต.
  • การจัดการข้อมูลเมตาเพื่อเข้าถึงวิธีการโดยตรง.
  • การสืบค้นแบบบังคับ: ผู้โจมตีจะลอง URL แก้ไขพา ธ (เช่น http: //website.domain/user/ เป็น http: //website.domain/admin) และสามารถค้นหาไฟล์สำคัญได้.

วิธีป้องกัน?

ส่วนใหญ่ข้อบกพร่องการเข้าถึงที่เสียหายเกิดขึ้นเนื่องจากความไม่รู้เกี่ยวกับข้อกำหนดที่จำเป็นของการจัดการการเข้าถึงที่มีประสิทธิภาพ.

  • ปฏิเสธเป็นค่าเริ่มต้นยกเว้นทรัพยากรสาธารณะ.
  • ปิดการใช้งานรายชื่อไดเรกทอรีเซิร์ฟเวอร์และตรวจสอบให้แน่ใจว่าไม่มีไฟล์สำรอง.
  • อัตรา จำกัด การเข้าถึง API เพื่อลดผลกระทบของการโจมตีอัตโนมัติ.
  • ทำให้โทเค็น JWT ไม่ถูกต้องหลังจากออกจากระบบที่แบ็คเอนด์.

การเปิดเผยข้อมูล

การเปิดเผยข้อมูลเป็นการคุกคามทางไซเบอร์ที่คุกคามธุรกิจและลูกค้าของพวกเขา.

มันเกิดขึ้นเมื่อแอปพลิเคชันไม่ปกป้องข้อมูลอย่างเพียงพอเช่นข้อมูลรับรองหรือข้อมูลที่ละเอียดอ่อนเช่นบัตรเครดิตหรือบันทึกสุขภาพ บันทึกมากกว่า 4,000 รายการ ละเมิดทุกนาที.

ผลกระทบต่อธุรกิจมีขนาดใหญ่จากด้านการเงิน: การฝ่าฝืนค่าเฉลี่ยสามารถเสียค่าใช้จ่าย 3.92 ล้านเหรียญสหรัฐ ไอบีเอ็ม.

วิธีป้องกัน?

ในฐานะผู้พัฒนาแบ็กเอนด์คุณควรถามว่าข้อมูลที่ต้องการการป้องกันคืออะไร.

แล้วเพื่อป้องกันข้อบกพร่องดังกล่าว:

  • เข้ารหัสข้อมูลที่สำคัญ: สำหรับข้อมูลที่ REST ให้เข้ารหัสทุกอย่าง สำหรับข้อมูลระหว่างทางอย่าลืมใช้เกตเวย์ที่ปลอดภัย (SSL)
  • ระบุข้อมูลที่ต้องการการป้องกันเป็นพิเศษและ จำกัด การเข้าถึงเฉพาะกลุ่มผู้ใช้ที่ถูกกฎหมายเท่านั้นโดยบังคับใช้การเข้ารหัสด้วยคีย์.
  • หลีกเลี่ยงอัลกอริทึมการเข้ารหัสที่อ่อนแอ: ใช้งานล่าสุดและ อัลกอริทึมที่แข็งแกร่ง.
  • มีแผนสำรองที่ปลอดภัย.

deserialization ที่ไม่ปลอดภัย

อนุกรมและ deserialization เป็นแนวคิดที่ใช้เมื่อข้อมูลถูกแปลงในรูปแบบวัตถุที่จะเก็บหรือส่งไปยังโปรแกรมอื่น การทำให้เป็นอนุกรมประกอบด้วยการแปลงข้อมูลในรูปแบบวัตถุเช่น XML หรือ JSON เพื่อให้สามารถใช้งานได้ Deserialization เป็นเพียงกระบวนการย้อนกลับ.

การโจมตีผู้กดขี่สามารถนำไปสู่การโจมตีแบบปฏิเสธการให้บริการการควบคุมการเข้าถึงและการเรียกใช้รหัสระยะไกล (RCE) หากมีคลาสที่สามารถปรับเปลี่ยนเพื่อเปลี่ยนพฤติกรรมได้.

ตัวอย่างที่สองของเอกสาร 10 อันดับแรกของ OWASP ให้ภาพประกอบที่ดีของ PHP object serializer:

A: 4: {i: 0; i: 132; i: 1; s: 7:"มัลลอ"ฉัน: 2; s: 4:"ผู้ใช้งาน";
i: 3; s: 32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

นี่เป็นซูเปอร์คุ๊กกี้ที่มีข้อมูลเช่น ID ผู้ใช้ระดับของผู้ใช้และรหัสผ่านที่แฮช.

ผู้โจมตีสามารถเปลี่ยนวัตถุที่เป็นอนุกรมเพื่อเข้าถึงสิทธิ์ผู้ดูแลระบบ:

A: 4: {i: 0; i: 1; i: 1; s: 5:"อลิซ"ฉัน: 2; s: 5:"ผู้ดูแลระบบ";
i: 3; s: 32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

วิธีป้องกัน?

สิ่งสำคัญคือไม่ต้องรับวัตถุที่ต่อเนื่องกันจากแหล่งที่ไม่น่าเชื่อถือ.

คุณควร:

  • อย่าไว้ใจอินพุตของผู้ใช้.
  • ตรวจสอบข้อมูล: หากแอปพลิเคชันของคุณยกเว้นสตริงให้ตรวจสอบว่าเป็นสตริงก่อนที่จะใช้
  • ใช้การตรวจสอบเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงข้อมูล มีประโยชน์ที่คุณกำลังส่งข้อมูลระหว่างสองแหล่งที่เชื่อถือได้ (เช่นการจัดเก็บข้อมูลฝั่งไคลเอ็นต์).

เซิร์ฟเวอร์ XSS

เซิร์ฟเวอร์ XSS (การเขียนสคริปต์ข้ามไซต์) เป็นชนิดของการฉีดเมื่อผู้โจมตีใช้เว็บแอปพลิเคชันเพื่อส่งรหัสที่เป็นอันตรายไปยังผู้ใช้ที่แตกต่างกัน มันเกิดขึ้นเมื่อผู้โจมตีโพสต์ข้อมูลที่สร้างขึ้นบางอย่างที่มีรหัสอันตรายที่แอปพลิเคชันจัดเก็บ ช่องโหว่นี้อยู่ฝั่งเซิร์ฟเวอร์ เบราว์เซอร์เพียงแสดงผลการตอบสนอง.

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

วิธีป้องกัน?

หลังจากการระบุตัวตนหลักของการดำเนินการทั้งหมดที่อาจมีความเสี่ยงของ XSS และจำเป็นต้องได้รับการปกป้องคุณควรพิจารณาสิ่งต่อไปนี้.

  • ตรวจสอบอินพุต: ตรวจสอบความยาวของอินพุตใช้การจับคู่ regex และอนุญาตเฉพาะชุดอักขระบางตัวเท่านั้น.
  • ตรวจสอบผลลัพธ์: หากแอปพลิเคชันคัดลอกลงในการตอบสนองต่อรายการข้อมูลใด ๆ ที่มาจากผู้ใช้บางรายหรือบุคคลที่สามข้อมูลนี้ควรเข้ารหัส HTML เพื่อฆ่าเชื้ออักขระที่อาจเป็นอันตราย.
  • อนุญาต HTML ที่ จำกัด : ตัวอย่างเช่นหากคุณมีระบบบล็อกความคิดเห็นอนุญาตการใช้งานแท็กบางอย่างเท่านั้น หากสามารถทำได้ให้ใช้เฟรมเวิร์กที่เหมาะสมกับมาร์กอัป HTML ที่ผู้ใช้ระบุเพื่อพยายามตรวจสอบให้แน่ใจว่าไม่มีวิธีการเรียกใช้ JavaScript.

ข้อสรุป

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map