Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
การรับรองความถูกต้องคือการพิสูจน์ตัวตนของผู้ใช้ระบบคอมพิวเตอร์ ผู้ใช้มักจะถูกระบุด้วย ID ผู้ใช้และการรับรองความถูกต้องจะสําเร็จเมื่อผู้ใช้ให้ข้อมูลประจําตัวเช่นรหัสผ่านที่ตรงกับ ID ผู้ใช้ การรับรองความถูกต้องมีสามวิธีทั่วไป
การรับรองความถูกต้องพื้นฐาน HTTP ในวิธีนี้ตัวแทนผู้ใช้ HTTP เพียงแค่ให้ชื่อผู้ใช้และรหัสผ่านเพื่อพิสูจน์การรับรองความถูกต้อง วิธีนี้ไม่ต้องใช้คุกกี้รหัสเซสชันหน้าเข้าสู่ระบบและโซลูชันพิเศษอื่นๆ และเนื่องจากใช้ส่วนหัว HTTP เอง
โทเค็นหรือคีย์ API ที่ใช้คีย์ถูกสร้างขึ้นเพื่อแก้ไขปัญหาการรับรองความถูกต้องในช่วงต้นของการรับรองความถูกต้องพื้นฐาน HTTP ในวิธีนี้ค่าที่สร้างขึ้นที่ไม่ซ้ํากันจะถูกกําหนดให้กับผู้ใช้ครั้งแรกแต่ละคนซึ่งแสดงว่าผู้ใช้เป็นที่รู้จัก เมื่อผู้ใช้พยายามเข้าสู่ระบบอีกครั้งคีย์เฉพาะของพวกเขาจะถูกใช้เพื่อพิสูจน์ว่าพวกเขาเป็นผู้ใช้รายเดิม
OAuth OAuth ไม่ใช่วิธีการตรวจสอบสิทธิ์ในทางเทคนิค แต่เป็นวิธีทั้งการตรวจสอบสิทธิ์และการอนุญาต ในวิธีนี้ผู้ใช้เข้าสู่ระบบ ระบบนั้นจะขอการรับรองความถูกต้องโดยปกติจะอยู่ในรูปของโทเค็น จากนั้นผู้ใช้จะส่งต่อคําขอนี้ไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ซึ่งจะปฏิเสธหรืออนุญาตการรับรองความถูกต้องนี้ จากที่นี่โทเค็นจะถูกมอบให้กับผู้ใช้จากนั้นไปยังผู้ขอ โทเค็นดังกล่าวสามารถตรวจสอบได้ตลอดเวลาโดยไม่ขึ้นกับผู้ใช้โดยผู้ร้องขอเพื่อตรวจสอบความถูกต้อง
ในบทนี้จะแนะนำการรักษาความปลอดภัยของ Web application อธิบายคำศัพท์ทั่วไปเกี่ยวกับความปลอดภัยและคำแนะนำวิธีใช้แนวทางเหล่านั้น ซึ่งจะนำเสนอภาพรวมของกระบวนการรักษาความปลอดภัยและวิธีการรักษาความปลอดภัยที่ครอบคลุมหลายชั้น รวมถึงเครือข่าย โฮสต์ และแอปพลิเคชัน
Open ID เป็นโปรโตคอลการรับรองความถูกต้องแบบมาตรฐานแบบเปิดและแบบกระจายอํานาจ เป็นเลเยอร์การตรวจสอบสิทธิ์ที่ด้านบนของ OAuth 2.0 OpenID อนุญาตให้ผู้ใช้ใช้บัญชีที่มีอยู่เพื่อลงชื่อเข้าใช้หลายเว็บไซต์โดยไม่จําเป็นต้องสร้างรหัสผ่านใหม่ ผู้ใช้สร้างบัญชีโดยเลือกผู้ให้บริการข้อมูลประจําตัว OpenID แล้วใช้บัญชีเหล่านั้นเพื่อลงชื่อเข้าใช้เว็บไซต์ใดๆ ที่ยอมรับการรับรองความถูกต้องของ OpenID องค์กรขนาดใหญ่หลายแห่งออกหรือยอมรับ OpenID บนเว็บไซต์ของตนตาม OpenID Foundation
การเชื่อมต่อ Open ID ต้องใช้ actors 3 คน
Open ID Provider - เป็นเซิร์ฟเวอร์การอนุญาตที่สามารถตรวจสอบผู้ใช้ปลายทางและให้ข้อมูลที่จําเป็นแก่แอปพลิเคชันที่ร้องขอข้อมูล
Relying Party - แอปพลิเคชันไคลเอ็นต์ร้องขอการรับรองความถูกต้องของผู้ใช้ปลายทางและข้อมูลเกี่ยวกับผู้ใช้ปลายทาง
End-User - ผู้เข้าร่วมที่เป็นมนุษย์ได้รับการรับรองความถูกต้องและผู้ที่ฝ่ายที่พึ่งพากําลังขอข้อมูล
จากเวอร์ชัน 4.0.19.10 IAM2 ใน ONEWEB ยอมรับการรับรองความถูกต้อง Open ID เวอร์ชันปัจจุบันรองรับการตอบสนองเพียง 4 ประเภท: Code, Access Token, ID Token & none
Response Type: Code เมื่อตั้งค่าประเภทการตอบกลับเป็นรหัส ระบบจะส่งคืนรหัสการให้สิทธิ์ คอมโพเนนต์เซิร์ฟเวอร์ของ Relying Party สามารถแลกเปลี่ยนรหัสเป็นโทเค็นที่ต้องการได้
Response Type: Token เมื่อชนิดการตอบกลับถูกตั้งค่าเป็นโทเค็น จะทริกเกอร์โฟลว์โดยนัยและส่งคืนโทเค็นการเข้าถึงไปยังฝ่ายที่พึ่งพาโดยตรง โทเค็นการเข้าถึงคือข้อมูลประจําตัวที่ใช้ในการเข้าถึงทรัพยากรที่มีการป้องกัน โทเค็นการเข้าถึงแสดงถึงขอบเขตและระยะเวลาการเข้าถึงที่เฉพาะเจาะจง
Response Type: ID Token เมื่อประเภทการตอบกลับถูกตั้งค่าเป็น id_token จะทริกเกอร์โฟลว์โดยนัยและส่งคืนโทเค็น ID ไปยังฝ่ายที่พึ่งพาโดยตรง โทเค็น ID มีการอ้างสิทธิ์เกี่ยวกับการรับรองความถูกต้องของผู้ใช้ปลายทางและข้อมูลประจําตัวของพวกเขา โดยอาจมีข้อมูลอื่นๆ เกี่ยวกับผู้ใช้ปลายทาง ฝ่ายที่พึ่งพาที่ต้องการรับข้อมูลเพิ่มเติมเกี่ยวกับผู้ใช้ปลายทางจําเป็นต้องแสดงโทเค็นการเข้าถึงที่ได้รับไปยังตําแหน่งข้อมูลผู้ใช้
Response Type: none เมื่อประเภทการตอบกลับถูกตั้งค่าเป็นไม่มี ผู้ร้องขอไม่ต้องการให้ส่งคืนรายการใดๆ ข้างต้น
ประเภทการตอบสนอง "none" เป็นกรณีพิเศษที่ไม่สามารถใช้ร่วมกับประเภทอื่นได้ อีกสามตัวสามารถรวมกันในแบบที่คุณต้องการ แต่ IAM2 เวอร์ชันปัจจุบันไม่รองรับประเภทการตอบสนองแบบผสม สําหรับการใช้ประเภทการตอบกลับแบบผสม โปรดรอ IAM2 รุ่นในอนาคต
เมื่อลงทะเบียนรหัสไคลเอ็นต์กับ ONEWEB แล้วผู้ใช้สามารถใช้การตรวจสอบสิทธิ์ Open ID ผ่าน IAM2 ดังที่แสดงในคําขอตัวอย่างด้านล่าง
แม้ว่าจะไม่มีวิธีรับประกันความปลอดภัย 100% สําหรับระบบใดๆ อย่างไรก็ตามมีหลายวิธีที่คุณสามารถลดโอกาสในการประสบปัญหาด้านความปลอดภัยในขณะที่สร้างแอพพลิเคชันใดๆ บนแพลตฟอร์ม ONEWEB โดยคํานึงถึงสิ่งต่อไปนี้
สร้างพิมพ์เขียวการรักษาความปลอดภัย สิ่งนี้ควรรวมถึงการกําหนดพื้นที่ปัญหาในแอพพลิเคชันของคุณจุดเสี่ยงเทคนิคการเปิดเผยข้อมูลที่ละเอียดอ่อนและความเข้าใจในโครงสร้างสิทธิ์/บทบาท
ดําเนินการ inventory ของ artifacts แอพพลิเคชันของคุณ สิ่งนี้ควรรวมถึงข้อมูลภายนอกหรือไฟล์ใดๆ ที่ใช้โดยแอพพลิเคชันของคุณพวกเขาอยู่ที่ไหนและบริการของบุคคลที่สามที่ใช้
จัดลําดับความสําคัญของช่องโหว่ของแอพพลิเคชันของคุณ สําหรับสิ่งนี้คุณต้องตัดสินใจว่าช่องโหว่ใดที่ควรค่าแก่การกําจัดและไม่น่าเป็นห่วงเกินไปเนื่องจากไม่สามารถกําจัดช่องโหว่ทั้งหมดได้อย่างสมบูรณ์
เรียกใช้แอพพลิเคชันโดยใช้สิทธิ์น้อยที่สุด ใช้การตั้งค่าที่อนุญาตน้อยที่สุดสําหรับเว็บแอพพลิเคชันทั้งหมดเสมอ เฉพาะผู้มีอํานาจสูงเท่านั้นที่สามารถเปลี่ยนแปลงระบบได้
มีการป้องกันชั่วคราวในสถานที่ หากระบบของคุณถูกโจมตีหรือหากฟังก์ชันการทํางานทําให้แอพพลิเคชันเสี่ยงต่อการถูกโจมตีอาจคุ้มค่าที่จะลบฟังก์ชันนั้นในระหว่างนี้ มีไฟร์วอลล์เว็บแอพพลิเคชันในสถานที่
ใช้คุกกี้อย่างปลอดภัย ห้ามใช้คุกกี้เพื่อจัดเก็บข้อมูลที่มีความละเอียดอ่อนหรือสําคัญ ไม่ควรกําหนดวันหมดอายุที่ยาวมากสําหรับคุกกี้ พิจารณาเข้ารหัสข้อมูลที่เก็บไว้ในคุกกี้
บทความนี้ประกอบด้วยตัวอย่างการกําหนดค่าบางส่วนสําหรับการใช้ LDAP สําหรับการรับรองความถูกต้องด้วย ONEWEB 4.0 ลองกําหนดค่าขั้นตอนนี้
ข้อมูลพื้นฐานจากการเชื่อมต่อจะถูกกําหนดด้วยแอตทริบิวต์ต่อไปนี้
security-domain name: ชื่อแอตทริบิวต์สําหรับ ONEWEB 4.0 คงที่เป็นการอ้างอิง "LDAPAuthLocal" จาก jboss-web.xml url: URL ของเซิร์ฟเวอร์ LDAP ที่จะเชื่อมต่อ ตัวอย่าง "ldap://[ที่อยู่ IP ของเซิร์ฟเวอร์]:[พอร์ต]" bindDN: ชื่อจําเพาะที่จะใช้เมื่อสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ เมื่อใช้ bindDN มักจะมาพร้อมกับรหัสผ่านที่เกี่ยวข้อง bindCredential: รหัสผ่านที่จําเป็นสําหรับชื่อ bindDN ที่ระบุเพื่อสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ baseCtxDN: จุดเริ่มต้นที่จะเริ่มค้นหา baseFilter: ตัวกรองการค้นหาที่ใช้เพื่อค้นหาบริบทของผู้ใช้ในการตรวจสอบสิทธิ์ ชื่อผู้ใช้/userDN ที่ป้อนตามที่ได้รับจากการเรียกกลับโมดูลการเข้าสู่ระบบจะถูกแทนที่ลงในตัวกรองทุกที่ที่เห็นนิพจน์{0} ลักษณะการทํางานการแทนที่นี้มาจากวิธีการมาตรฐาน DirContext.search(Name, String, Object[], SearchControls cons) ตัวอย่างทั่วไปสําหรับตัวกรองการค้นหาคือ (uid={0}) rolesCtxDN: ตัวกรองการค้นหาที่ใช้เพื่อค้นหาบทบาทที่เกี่ยวข้องกับผู้ใช้ที่ได้รับการรับรองความถูกต้อง roleAttributeID: ชื่อของแอตทริบิวต์บทบาทของบริบทที่สอดคล้องกับชื่อของบทบาท searchScope: ใช้ขอบเขตเริ่มต้นคือ SUBTREE_SCOPE
สําหรับ Wildfly กําหนดค่า "stanalone.xml" tag "<profile>" sub tag "<subsystem>" <security-domains> ให้ลองแทรก ดูตัวอย่างด้านล่าง
หมายเหตุ: เซิร์ฟเวอร์ LDAP ที่แตกต่างกันหากใช้ Apache Directory หรือชื่อตัวเลือกโมดูลการเปลี่ยนแปลง OpenLdap "baseFilter" = "(uid = {0})", "roleAttributeID" = "CN"
ระบุโดเมนความปลอดภัย JBoss ในไฟล์ jboss-web.xml ให้ระบุโดเมนความปลอดภัยที่จําเป็น ดูตัวอย่างด้านล่าง
การรักษาความปลอดภัยเป็นพื้นฐานของการปกป้องทรัพย์สิน เช่น เว็บเพจหรือข้อมูลลูกค้าในฐานข้อมูล ขณะที่คุณวิเคราะห์โครงสร้างพื้นฐานและแอปพลิเคชันของคุณ คุณจะสามารถระบุภัยคุกคามที่อาจเกิดขึ้นได้ และสามารถเข้าใจได้ว่าว่าภัยคุกคามแต่ละรายการมีความเสี่ยงในระดับใด การรักษาความปลอดภัยเป็นเรื่องเกี่ยวกับการจัดการความเสี่ยงและการใช้มาตรการที่มีประสิทธิภาพ
รากฐานของความปลอดภัย (The Foundations of Security)
ความปลอดภัยขึ้นกับองค์ประกอบดังต่อไปนี้
การรับรองความถูกต้อง (Authentication)
Authentication เป็นกระบวนการระบุไคลเอ็นต์ของแอปพลิเคชันของคุณ เป็นสิ่งที่ระบุว่าคุณเป็นใคร สิ่งเหล่านี้อาจเป็นผู้ใช้ปลายทาง บริการ กระบวนการ หรือคอมพิวเตอร์ ไคลเอ็นต์ที่รับรองความถูกต้องเรียกว่าตัวการ
Authorization เป็นกระบวนการที่ควบคุมทรัพยากรและการดำเนินการที่ไคลเอ็นต์ที่ผ่านการรับรองความถูกต้องได้รับอนุญาตให้เข้าถึง หรือการระบุว่าคุณสามารถทำอะไรได้บ้าง ทรัพยากรประกอบด้วยไฟล์ ฐานข้อมูล ตาราง แถว และทรัพยากรระบบ เช่น รีจิสตรีคีย์และข้อมูลการกำหนดค่า การดำเนินการรวมถึงการดำเนินการธุรกรรม เช่น การดำเนินการ CRUD
การตรวจสอบบัญชี (Auditing )
การตรวจสอบและการบันทึกที่มีประสิทธิภาพเป็นกุญแจสำคัญในการไม่ปฏิเสธ ซึ่งรับประกันว่าผู้ใช้ไม่สามารถปฏิเสธการดำเนินการได้
Confidentiality คือกระบวนการทำให้แน่ใจว่าข้อมูลยังคงเป็นส่วนตัวและเป็นความลับ และไม่สามารถดูได้โดยผู้ใช้ที่ไม่ได้รับอนุญาตหรือผู้ที่ติดตามทราฟฟิกผ่านเครือข่าย การเข้ารหัสมักใช้เพื่อบังคับใช้การรักษาความลับ รายการควบคุมการเข้าถึง (ACL) เป็นอีกวิธีหนึ่งในการบังคับใช้การรักษาความลับ
คือการรับรองว่าข้อมูลจะไม่ถูกกระทำการใด ๆ อันมีผลให้เกิดการ เปลี่ยนแปลงหรือแก้ไขจากผู้ซึ่งไม่มีสิทธิ ไม่ว่าการกระทำนั้นจะมีเจตนาหรือไม่ก็ตาม
Availability คือการรับรองได้ว่าข้อมูลหรือระบบเทคโนโลยีสารสนเทศ ทั้งหลายพร้อมที่จะให้บริการในเวลาที่ต้องการใช้งาน
หากยังไม่ทราบถึงภัยคุกคามที่จะเกิดขึ้น ก็จะยังไม่สามารถออกแบบ web application ที่ปลอดภัยได้ กฏหนึ่งที่สำคัญเป็นอย่างมากและแนะนำให้เป็นส่วนหนึ่งของขั้นตอนการออกแบบแอปพลิเคชันของคุณคือ วัตถุประสงค์ของการสร้างแบบจำลองภัยคุกคามคือการวิเคราะห์สถาปัตยกรรมและการออกแบบของแอปพลิเคชัน ที่จะช่วยระบุพื้นที่ที่อาจเสี่ยงซึ่งอาจเกิดจากความผิดพลาดของผู้ใช้งานเอง หรือผู้โจมตีที่มีเจตนาร้าย เพื่อการนั้นแล้ว การออกแบบด้วยความปลอดภัยโดยใช้หลักการความปลอดภัยที่ถูกพิสูจน์แล้ว ในฐานะนักพัฒนา คุณควรปฏิบัติตามเทคนิคการเข้ารหัสที่ปลอดภัยเพื่อพัฒนาโซลูชันที่ปลอดภัยและแข็งแกร่ง โดยการออกแบบและพัฒนาซอฟต์แวร์ชั้นแอปพลิเคชันต้องได้รับการสนับสนุนโดยเครือข่ายที่ปลอดภัย โฮสต์ และการกำหนดค่าแอปพลิเคชันบนเซิร์ฟเวอร์ที่จะปรับใช้ซอฟต์แวร์แอปพลิเคชัน
แนวทางการออกแบบเพื่อความปลอดภัย
โครงสร้างเครือข่ายนั้ประกอบไปด้วย routers firewall และ switch โดยบทบาทของเครือข่ายที่ปลอดภัยไม่เพียงป้องกันตัวเองจากการโจมตีตาม TCP/IP แต่ยังสามารถใช้มาตรการตอบโต้ได้ เช่น อินเทอร์เฟซการดูแลระบบที่ปลอดภัยและรหัสผ่านที่รัดกุม นอกจากนี้แล้วเครือข่ายที่ปลอดภัย ยังมีหน้าที่รับผิดชอบในการตรวจสอบข้อมูลที่กำลังถูกส่งอยู่ว่ามีความสมบูรณ์ดีหรือไม่ หากคุณทราบถึงเกี่ยวกับ port protocal หรือการสื่อสารที่อาจเป็นอันตรายที่ที่ระดับชั้นของเครือข่ายใด ให้ทำการตอบโต้ภัยคุกคามที่อาจเกิดขึ้นที่ระดับชั้นนั้น
หมวดหมู่
คำอธิบาย
Router
เราเตอร์เป็นวงแหวนเครือข่ายชั้นนอกสุด มีหน้าที่ส่งแพ็กเก็ตไปยัง Port และ Protocal ที่แอปพลิเคชัน ช่องโหว่ด้าน TCP/IP ทั่วไปมักถูกบล็อกที่วงแหวนนี้
Firewall
Firewall จะทำการบล็อค protocol และ ports ที่ applicationไม่ได้ใช้ นอกจากนี้ ไฟร์วอลล์ยังบังคับให้ใช้ทราฟฟิกเครือข่ายที่ปลอดภัยด้วยการกรองเฉพาะแอปพลิเคชันเพื่อบล็อกการสื่อสารที่เป็นอันตราย
Switch
Switch ใช้เพื่อแยกส่วนของเครือข่าย มักถูกมองข้ามหรือเชื่อถือมากเกินไป
สำหรับปัญหาด้านความปลอดภัยของ web application อันดับต้นๆ ในบทนี้จะรวบรวมไว้เป็นหมวดหมู่เอาไว้
ตารางหมวดหมู่ช่องโหว่ของแอปพลิเคชัน
หมวดหมู่
คำอธิบาย
การตรวจสอบค่าที่ถูกป้อน (Input Validation)
คุณจะไม่มีทางทราบเลยว่าข้อมูลที่กรอกลงมาในแอปพลิเคชันของคุณนั้นถูกต้องและปลอดภัย การตรวจสอบอินพุตหมายถึงวิธีที่แอปพลิเคชันของคุณกรอง ขัด หรือปฏิเสธอินพุตก่อนดำเนินการเพิ่มเติม
การตรวจสอบตัวตน (Authentication)
การรับรองความถูกต้อง (Authentication) เป็นกระบวนการที่เอนทิตีพิสูจน์ตัวตนของเอนทิตีอื่น โดยทั่วไปจะใช้ข้อมูลประจำตัว เช่น ชื่อผู้ใช้และรหัสผ่าน
การอนุญาต (Authorization)
Authorization เป็นวิธีที่แอปพลิเคชันของคุณจัดเตรียมการควบคุมการเข้าถึงสำหรับทรัพยากรและการดำเนินการต่างๆ
การจัดการการตั้งค่า (Configuration Management)
ตรวจสอบว่าแอปพลิเคชันของคุณทำงานอย่างไร เชื่อมต่อกับฐานข้อมูลใด ใครคือผู้ดูแลระบบของแอป และการรักษาความปลอดภัยถูกตั้งค่าไว้อย่างไร หัวข้อเหล่านี้คือ การจัดการการตั้งค่า ซึ่งเป็นวิธีที่แอปพลิเคชันของคุณจัดการกับปัญหาการดำเนินงานเหล่านี้
ข้อมูลที่อ่อนไหว (Sensitive Data)
วิธีการที่แอปพลิเคชันของคุณจัดการกับข้อมูลใดๆ ที่ต้องได้รับการปกป้องทั้งในหน่วยความจำ ผ่านสาย หรือในที่จัดเก็บถาวร
การจัดการข้อมูลการใช้งานเครือข่าย (Session Management)
เซสชันหมายถึงชุดของการโต้ตอบที่เกี่ยวข้องระหว่างผู้ใช้และเว็บแอปพลิเคชันของคุณ การจัดการเซสชันหมายถึงวิธีที่แอปพลิเคชันของคุณจัดการและปกป้องการโต้ตอบเหล่านี้
การเข้ารหัส (Cryptography)
ตรวจสอบว่าแอปพลิเคชันคุณเก็บชุดข้อมูลที่ควรถูกรักษาเป็นความลับอย่างไร และหากมีการแก้ไขชุดข้อมูลนั้นจะต้องทำอย่างไร ใน การเข้ารหัสนี้จะเป็นการพูดถึงการจัดการชุดข้อมูลที่ควรเป็นความลับ ทั้งในการจัดเก็บและการแก้ไข
การจัดการตัวแปร (Parameter Manipulation)
ฟิลด์ฟอร์ม อาร์กิวเมนต์ของสตริงข้อความค้นหา และค่าคุกกี้มักถูกใช้เป็นพารามิเตอร์สำหรับแอปพลิเคชันของคุณ การจัดการพารามิเตอร์หมายถึงวิธีที่แอปพลิเคชันของคุณป้องกันการดัดแปลงค่าเหล่านี้ และวิธีที่แอปพลิเคชันของคุณประมวลผลพารามิเตอร์อินพุต
ด้านการจัดการข้อผิดพลาด
(Exception Management)
การจัดการข้อผิดพลาดคือการตอบสนองเมื่อมีการเรียกใช้งานบางอย่างในแอปพลิเคชันเกิดความล้มเหลว แล้วแอปพลิเคชันนั้นมีการตอบสนองไปยังผู้ใช้งานที่ทำให้ผู้ใช้งานยังใช้งานส่วนอื่นของแอปพลิเคชันได้หรือไม่
(การตรวจสอบและการบันทึก) Auditing and Logging
เป็นการตรวจสอบว่าใครกำลังทำอะไร และมีการบันทึกแต่ละการกระทำหรือไม่ ซึ่งเป็นการทำเพื่อเมื่อเกิดเหตุการณ์ที่ไม่คาดฝันซึ่งเกี่ยวข้องกับความปลอดภัย เราจะสามารถตรวจสอบภายหลังได้
สรุป
มีการโจมตีทางเครือข่ายมากมายที่อาจมุ่งเป้ามาที่แอปพลิเคชันของคุณ ซึ่งพวกเขาอาจผ่านเข้ามาทาง HTTP ดังนั้น การแยกใช้การป้องกันแบบ fortress firewall และ ตัวป้องกัน host นั้นอาจไม่เพียงพอ เพื่อป้องกันแอปพลิเคชันของคุณ คุณควรใช้งานร่วมกันทั้ง 3 ส่วน เพื่อป้องกันทั้งในชั้นเครือข่าย (Network layor) ชั้นโฮสต์ (Host layer) และชั้นแอปพลิชัน นอกจากนี้แล้ว เครือข่ายที่ปลอดภัยและโครงสร้างพื้นฐานของแพลตฟอร์มโฮสต์นั้นเป็นสิ่งจำเป็น ดังนั้น แอปพลิเคชันของคุณจึงควรออกแบบและสร้างโดยใช้แนวทางการออกแบบและการพัฒนาที่ปลอดภัยตามหลักการความปลอดภัย (security principles)
แหล่งอ้างอิง [1] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Network Component Categories, Table 1.1: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017]. [2] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Rationale for Host Configuration Categories, Table 1.2: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017]. [3] Microsoft, "Microsoft Pattern & Practices proven practices for predictable results", Web Application Security Fundamentals, Chapter 1, Application Vulnerability Categories, Table 1.3: Avaliable: https://msdn.microsoft.com/en-us/library/ff648636.aspx#c01618429_008. [Accessed Nov 14, 2017].
รูปแบบการควบคุมการเข้าถึงใน ONEWEB ขึ้นอยู่กับบทบาทสิทธิ์และ Objects คุณสามารถควบคุมสิทธิ์ของผู้ใช้โดยใช้ model นี้
บทบาท (Role) เป็นฟังก์ชันงานที่กําหนดระดับสิทธิ์และสามารถใช้เพื่อกําหนดระดับสิทธิ์ในแต่ละ object ได้ คุณสามารถกําหนดบทบาทและมอบหมายให้กับผู้ใช้หลายคนที่มีสิทธิ์เดียวกันได้อย่างง่ายดาย
สิทธิ์ (Permissions) คือการอนุมัติในโหมดการเข้าถึง object หรือกลุ่มของ objects คุณสามารถจัดกลุ่มการใช้งาน objects ที่คล้ายกันเข้าด้วยกันเป็นสิทธิ์เดียวเพื่อจัดการและมอบหมายให้กับบทบาทและผู้ใช้จํานวนมากได้อย่างง่ายดาย
Object เป็นสิ่งที่ต้องควบคุมการเข้าถึงและป้องกัน object สามารถเป็นอะไรก็ได้ที่คุณต้องการเพื่อควบคุมการอนุญาตเช่นปุ่มกล่องข้อความเมนูหน้าไฟล์ ฯลฯ
สิ่งที่ควรทราบคือ
ผู้ใช้สามารถมีบทบาทได้มากมาย
สามารถกําหนดบทบาทให้กับผู้ใช้หลายคนได้
บทบาทหนึ่งสามารถมีสิทธิ์หลายสิทธิ์และ object หลายรายการ
สิทธิ์หนึ่งสิทธิ์สามารถกําหนดให้กับหลายบทบาทได้
สิทธิ์หนึ่งสิทธิ์สามารถมี object ได้หลายรายการ
ในการจัดการสิทธิ์และ Object ให้ทําตามขั้นตอนด้านล่าง
เปิด IAM โดยใช้ admin user
ไปที่เมนู Permission ภายใต้เมนู Admin
มีสองด้านที่ต้องพิจารณา ด้านซ้ายคือการควบคุมสิทธิ์และด้านขวาคือการควบคุม Object คุณสามารถสร้างสิทธิ์ใหม่และ Object ใหม่ผ่านปุ่ม new
เมื่อต้องการสร้างสิทธิ์ใหม่
คลิกปุ่ม New Permission จากนั้น pop-up New Permission จะปรากฏขึ้น
เลือก System สําหรับการอนุญาตที่คุณต้องการสร้าง
เลือก Parent Permission เพื่อวางสิทธิ์ใหม่ภายใต้สิทธิ์ที่มีอยู่หรือคุณสามารถเว้นว่างไว้เพื่อให้สิทธิ์ใหม่เป็นสิทธิ์ระดับบนสุด
ให้ Permission Name คลิก Save Permission เพื่อสร้างสิทธิ์ใหม่
ไปที่เมนู Permission tree คุณจะพบการอนุญาตใหม่ภายใต้ระบบที่คุณเลือก
เพื่อสร้าง Object
คลิกที่ปุ่ม New Object pop-up New Object จะปรากฏขึ้น
เลือก System สําหรับ Object ที่คุณต้องการสร้าง
ให้ข้อมูลใหม่เกี่ยวกับ
Object Object Id - ระบบจะสร้าง object id โดยอัตโนมัติ
Object Ref Id - Object Ref Id เป็นรหัสที่ระบบไคลเอ็นต์จัดเตรียมไว้ให้เพื่ออ้างอิงอ็อบเจ็กต์นี้
Object Name- ชื่อของ Object นี้
Object Type - ประเภทของ Object นี้
Object Property - คุณสมบัติ Object ช่วยให้คุณสามารถกําหนดค่าเฉพาะของอ็อบเจ็กต์นี้และจะถูกส่งกลับไปยังระบบไคลเอ็นต์เมื่อได้รับสิทธิ์
Access Type - ประเภทการเข้าถึงของ Object นี้ จากนั้นคลิก บันทึก Object เพื่อสร้าง Object ใหม่
ไปที่เมนู Object tree คุณจะพบ Object ใหม่ภายใต้ระบบที่คุณเลือก
ในการจัดการบทบาทสิทธิ์และ Object ของผู้ใช้ให้ทําตามขั้นตอนด้านล่าง
ไปที่ User Profile ภายใต้เมนู Admin
คลิกปุ่ม expand บนผู้ใช้ที่คุณต้องการเพิ่มหรือลบ role/permission/object
การเพิ่มบทบาท
คลิกที่ Add Roles บนผู้ใช้ที่คุณต้องการเพิ่มบทบาท
เลือกบทบาทที่คุณต้องการเพิ่มมันจะปรากฏทางด้านขวา จากนั้นคลิก Confirm Add Roles เพื่อเพิ่มบทบาทให้กับผู้ใช้
บทบาทที่คุณเลือกจะถูกเพิ่มลงในผู้ใช้
เมื่อต้องการลบบทบาท
เลือกบทบาทที่คุณต้องการลบออกจากผู้ใช้ จากนั้นคลิก Remove Roles
ปุ่ม Delete Confirmation จะปรากฏขึ้น หากคุณต้องการลบบทบาทออกจากผู้ใช้ให้คลิกที่ปุ่ม Delete UserRoles หากไม่เป็นเช่นนั้น คุณสามารถคลิก Undo เพื่อยกเลิกการลบบทบาทได้
เมื่อต้องการเพิ่มสิทธิ์/Object
คุณสามารถเพิ่มสิทธิ์หรือวัตถุเฉพาะที่ไม่ได้อยู่ในบทบาทให้กับผู้ใช้ เพียงคลิกปุ่ม Add Permission/Object
pop-up Object/Permission จะปรากฏขึ้น คุณสามารถเลือกสิทธิ์และ Object จาก pop-up นี้
ในการเพิ่ม Permission/Object ให้เรียกดูหรือค้นหาสิทธิ์ที่คุณต้องการเพิ่มลงในผู้ใช้จากระบบที่คุณมีสิทธิ์ Permission/Object ที่คุณเลือกจะปรากฏทางด้านขวา เมื่อคุณทําเสร็จแล้วเพียงคลิก Confirm Add Object/Permission เพื่อเพิ่มสิทธิ์/Object ให้กับผู้ใช้
Permission/Object ที่คุณเพิ่มจะถูกเพิ่มลงในผู้ใช้
เมื่อต้องการลบสิทธิ์/Object
เลือกสิทธิ์/Object ที่คุณต้องการลบออกจากผู้ใช้และคลิก Remove Permission/Object
ปุ่ม Delete Confirmation จะปรากฏขึ้น ถ้าคุณต้องการเอาสิทธิ์/Object ออกจากผู้ใช้ ให้คลิกปุ่ม Delete Object/Permission หากไม่เป็นเช่นนั้นคุณสามารถคลิก Undo เพื่อยกเลิกการลบ Object/สิทธิ์
ความปลอดภัยใน ONEWEB ควบคุมการเข้าถึงแอพพลิเคชันผ่านกลไกการรับรองความถูกต้องและการอนุญาตที่เกี่ยวข้องกัน เมื่อผู้ใช้ได้รับการรับรองความถูกต้องแล้ว ONEWEB จะใช้วิธีการอนุญาตและการควบคุมการเข้าถึงเพื่อปกป้องและรักษาความปลอดภัยทรัพยากร ทรัพยากรจะพร้อมใช้งานสําหรับผู้ใช้ตามบทบาทที่มีสิทธิ์ที่เหมาะสม ONEWEB รองรับการรับรองความถูกต้อง LDAP รวมถึงการรับรองความถูกต้องของที่เก็บในเครื่องใน ONEWEB
ตามรูปแบบการควบคุมการเข้าถึงใน ONEWEB ผู้ใช้จะได้รับมอบหมายบทบาทและบทบาทมีสิทธิ์ในการเข้าถึง objects สิ่งนี้จะกําหนดสิ่งที่ผู้ใช้และบทบาทสามารถทําได้และไม่สามารถทําได้
EAF-REST API ให้ API บริการเว็บที่มีประสิทธิภาพสะดวกและเรียบง่ายสําหรับการโต้ตอบกับ ONEWEB 4.0 สําหรับการดําเนินการ CRUD มาตรฐานไปยังฐานข้อมูล คุณลักษณะนี้ใช้แนวคิดของ JWT (Json Web Token) เพื่อความปลอดภัย ไคลเอนต์สามารถเชื่อมต่อกับเซิร์ฟเวอร์ส่งและรับข้อมูลในรูปแบบ JSON (JavaScript Object Notation) คําขอทั้งหมดจากไคลเอ็นต์ควรส่งพารามิเตอร์ "Authorization" ใน header ดูขั้นตอนในการเชื่อมต่อกับเซิร์ฟเวอร์ด้านล่าง
ขอเข้าสู่ระบบ (Request login) ขั้นตอนแรกไคลเอนต์เข้าสู่ระบบเซิร์ฟเวอร์ด้วยข้อมูลผู้ใช้ EAF-REST ให้บริการเข้าสู่ระบบ URL "http://[ที่อยู่ IP]:[พอร์ต]/eaf-rest/login" ไคลเอ็นต์เชื่อมต่อโดยใช้วิธี POST และส่งข้อมูลผู้ใช้เช่นนี้
หมายเหตุ: "clientId" เป็นคีย์ที่ไม่ซ้ํากันที่สร้างขึ้นแบบสุ่มจากไคลเอนต์
เซิร์ฟเวอร์สร้างโทเค็น (Server create token) เซิร์ฟเวอร์สร้างข้อมูลเพย์โหลดและสร้างโทเค็น
ส่งคืนโทเค็นไปยังไคลเอ็นต์ (Return token to the client) ไคลเอ็นต์ได้รับข้อความจากเซิร์ฟเวอร์ ตัวอย่างเช่น ดูข้อความด้านล่าง
timestamp: เซิร์ฟเวอร์วันที่และเวลาสร้างโทเค็น validity: อายุของโทเค็นในมิลลิวินาทีเมื่อเซิร์ฟเวอร์ส่งคืนโทเค็นไปยังไคลเอนต์ โทเค็นจะหมดอายุโดยการคํานวณความถูกต้องจากการประทับเวลาและความถูกต้อง: days = ((validity/3600)/24) ONEWEB 4.0 set default expires in 1 day id_token: นี่คือค่าที่ไคลเอ็นต์ใช้ในการแนบกับคีย์การอนุญาต http header
ไคลเอ็นต์ส่งคําขอที่มีการอนุญาต header เมื่อไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ ทุกข้อความควรแนบโทเค็นกับคีย์การอนุญาตใน HTTP header
เซิร์ฟเวอร์จะตรวจสอบ signature และวันที่หมดอายุ เมื่อเซิร์ฟเวอร์ได้รับข้อความจากไคลเอนต์เซิร์ฟเวอร์จะตรวจสอบลายเซ็นและวันหมดอายุของโทเค็นเพื่อตรวจสอบข้อความ หากข้อความถูกต้องเซิร์ฟเวอร์จะยังคงประมวลผลข้อความจากไคลเอนต์ สําหรับข้อความที่ไม่ถูกต้องเซิร์ฟเวอร์ปฏิเสธคําขอจากไคลเอนต์นั้น
ส่งการตอบกลับไปยังไคลเอนต์ หลังจากเซิร์ฟเวอร์ประมวลผลคําขอแล้วเซิร์ฟเวอร์จะส่งการตอบกลับไปยังไคลเอนต์
ONEWEB 4.0 มีคุณสมบัติการบันทึกโดยใช้ไลบรารี log4j มันง่ายมากที่จะกําหนดค่าระดับบันทึกในไฟล์คุณสมบัติ log4j.properties จากนั้นไปที่ค่าคงที่ ONEWEB 4.0 เพื่อกําหนดค่าเส้นทางสําหรับไฟล์บันทึกเอาต์พุต ตัวอย่างไฟล์ log4j.properties
ONEWEB 4.0 รองรับ SSL โดยการตั้งค่า SSL / HTTPS บนเซิร์ฟเวอร์ของคุณ
สร้างคีย์ (Generate key) โดยทั่วไปคุณมีสองตัวเลือกในการสร้างคีย์
การใช้ Java Secure Socket Extension(JSSE)
การใช้งานดั้งเดิมตาม OpenSSL
ในทั้งสองกรณีคุณต้องกําหนดค่าคีย์และใบรับรอง (ลงนามด้วยตนเอง) สําหรับเว็บเซิร์ฟเวอร์ของคุณ
กําหนดค่า Wildfly ในกรณีที่สร้างคีย์จากไฟล์เอาต์พุตขั้นตอนที่ 1 จากขั้นตอนก่อนหน้าคือ "oneweb.keystore" จากนั้นคัดลอกไฟล์คีย์ไปที่ "[$JBOSS_HOME]/standalone/configuration/" ตอนนี้แก้ไขไฟล์แบบสแตนด์อโลน.xml
ภายใต้ตัวเลือก undertow subsystem มีสองส่วนหลักคือการกําหนดค่า Server และ Servlet container เพิ่ม https-listener ใต้เซิร์ฟเวอร์
ภายใต้กลุ่ม socket binding เปลี่ยนค่าเริ่มต้น WilfFly https พอร์ต 8443 ไป 443
IAM (Identity Access Management) เป็นโมดูลการตรวจสอบสิทธิ์และการควบคุมการเข้าถึงของ ONEWEB ใช้เพื่อสร้างและจัดการผู้ใช้จัดการบทบาทและสิทธิ์และ object ต่างๆในระบบ
IAM2 มาพร้อมกับโมดูลเว็บแอพพลิเคชันเพื่อการตั้งค่า object บทบาท และสิทธิ์ที่ง่ายดาย อีกวิธีหนึ่งคือ ผู้ดูแลระบบสามารถตั้งค่าบทบาทและสิทธิ์โดยใช้ IAM2 Web Service API ได้เช่นกัน สามารถกําหนดค่า IAM2 ให้ทํางานกับ LDAP ที่มีอยู่ในกรณีที่องค์กรมีการกําหนดค่า LDAP ไว้แล้ว
เมื่อต้องการสร้างบทบาท เปิด IAM โดยใช้ผู้ใช้ที่เป็น Admin
ไปที่ Role ใต้เมนู Admin
คลิกปุ่ม Create New Role
เพื่อสร้าง Role Select
System ที่คุณต้องการเพิ่มบทบาท
เลือก Parent Role หากคุณต้องการสร้างบทบาทนี้ภายใต้บทบาทอื่น
ป้อน Role Name
ป้อน Role Description จากนั้นคลิก Save Role
บทบาทใหม่จะปรากฏภายใต้ System และ Parent Role ที่คุณเลือก
เพื่อเพิ่มผู้ใช้ในบทบาท
ไปที่ Role ใต้เมนู Admin จากนั้นคลิกที่บทบาทที่คุณต้องการเพิ่มผู้ใช้
ระบบด้านขวาจะแสดงรายชื่อผู้ใช้ปัจจุบันในบทบาทนั้น คลิก Add Users
pop-up "Add Users To Role" จะปรากฏขึ้น ค้นหาและเลือกผู้ใช้ที่คุณต้องการเพิ่ม จากนั้นคลิก Confirm Users To Roles
เพื่อเพิ่มสิทธิ์ให้กับบทบาท
เลือกบทบาทที่คุณต้องการเพิ่มสิทธิ์
คลิกที่แท็บ Permission ที่แผงด้านขวา
คลิก Add Permissions/Objects เพื่อเพิ่มสิทธิ์ หรือ object
4. ค้นหาและเลือกสิทธิ์หรือวัตถุที่คุณต้องการเพิ่ม จากนั้นคลิก Confirm Add Object/Permission
ในการสร้างผู้ใช้ ให้ไปที่ IAM ในส่วนการตั้งค่าของ ONEWEB จากนั้นไปที่ส่วนเมนู Admin ภายใน IAM
หมายเหตุ: หากต้องการดูเมนู Admin คุณต้องมีสิทธิ์ของ Admin
ไปที่ User Profile ภายใต้เมนู Admin
คลิกปุ่ม Create New User
กรอกข้อมูลผู้ใช้ เช่น Username, First, Surname, Password, etc. และแนบรูปภาพ เลือก "Local Repository" เป็นตัวเลือก Repository เพื่อจัดเก็บชื่อผู้ใช้และรหัสผ่านไว้ในที่เก็บในตัวของ ONEWEB หากคุณใช้ที่เก็บภายนอก เช่น LDAP คุณสามารถกําหนดค่าการเชื่อมต่อ LDAP และเลือกที่เก็บ LDAP ได้เช่นกัน เมื่อเสร็จแล้วให้คลิก Save Change เพื่อสร้างผู้ใช้
คุณสามารถดูผู้ใช้ใหม่ได้บนหน้าจอ User Profile