ตัวอย่างการรักษาความปลอดภัยของเว็บเซอร์วิส (WS) ด้วย SOAP
⚡ สรุปอย่างชาญฉลาด
มาตรฐานความปลอดภัยของเว็บเซอร์วิส (WS Security) คือมาตรฐานที่ปกป้องข้อมูลที่แลกเปลี่ยนระหว่างการเรียกใช้เว็บเซอร์วิสแบบ SOAP เอกสารนี้จะอธิบายถึงภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ มาตรฐานความปลอดภัยของ WS การสร้างเว็บเซอร์วิสที่ปลอดภัยด้วยข้อมูลรับรอง และแนวปฏิบัติที่ดีที่สุดด้านความปลอดภัยของเว็บเซอร์วิส
WS Security คืออะไร?
WS Security คือมาตรฐานที่เกี่ยวข้องกับความปลอดภัยเมื่อมีการแลกเปลี่ยนข้อมูลซึ่งเป็นส่วนหนึ่งของเว็บเซอร์วิส นี่เป็นคุณสมบัติสำคัญใน SOAP ที่ทำให้ SOAP เป็นที่นิยมอย่างมากในการสร้างเว็บเซอร์วิส
ความปลอดภัยเป็นคุณสมบัติสำคัญในแอปพลิเคชันเว็บทุกประเภท เนื่องจากแอปพลิเคชันเว็บเกือบทั้งหมดเปิดเผยสู่โลกอินเทอร์เน็ต จึงมีโอกาสเสมอที่จะเกิดภัยคุกคามด้านความปลอดภัยต่อแอปพลิเคชันเว็บ ดังนั้น เมื่อพัฒนา...ping สำหรับแอปพลิเคชันบนเว็บ แนะนำให้ออกแบบและพัฒนาแอปพลิเคชันโดยคำนึงถึงความปลอดภัยเสมอ
ภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ
เพื่อให้เข้าใจถึงภัยคุกคามด้านความปลอดภัยที่อาจเป็นอันตรายต่อเว็บแอปพลิเคชัน เรามาลองพิจารณาสถานการณ์ง่ายๆ ของเว็บแอปพลิเคชันและดูว่ามันทำงานอย่างไรในแง่ของความปลอดภัย
หนึ่งในมาตรการรักษาความปลอดภัยที่มีให้สำหรับ HTTP คือโปรโตคอล HTTPS HTTPS เป็นวิธีการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ผ่านทางเว็บ HTTPS ใช้ Secure Sockets Layer หรือ SSL เพื่อการสื่อสารที่ปลอดภัย ทั้งไคลเอนต์และเซิร์ฟเวอร์จะมีใบรับรองดิจิทัลเพื่อยืนยันตัวตนว่าเป็นของแท้เมื่อมีการสื่อสารใดๆ เกิดขึ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์
ในการสื่อสาร HTTPS มาตรฐานระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ ขั้นตอนต่อไปนี้จะเกิดขึ้น:
- ไคลเอ็นต์ส่งคำขอไปยังเซิร์ฟเวอร์ผ่านใบรับรองไคลเอ็นต์ เมื่อเซิร์ฟเวอร์เห็นใบรับรองไคลเอ็นต์ เซิร์ฟเวอร์จะบันทึกลงในระบบแคชเพื่อให้ทราบว่าการตอบสนองควรกลับไปที่ไคลเอ็นต์นี้เท่านั้น
- จากนั้นเซิร์ฟเวอร์จะตรวจสอบตัวเองกับไคลเอนต์โดยการส่งใบรับรอง สิ่งนี้ทำให้แน่ใจได้ว่าไคลเอนต์กำลังสื่อสารกับเซิร์ฟเวอร์ที่ถูกต้อง
- หลังจากนั้น การสื่อสารทั้งหมดระหว่างไคลเอ็นต์และเซิร์ฟเวอร์จะถูกเข้ารหัส วิธีนี้ช่วยให้มั่นใจได้ว่า หากผู้ใช้รายอื่นพยายามเจาะระบบรักษาความปลอดภัยและเข้าถึงข้อมูลที่ต้องการ พวกเขาจะไม่สามารถอ่านข้อมูลได้ เนื่องจากข้อมูลถูกเข้ารหัสไว้แล้ว
แต่ระบบรักษาความปลอดภัยแบบข้างต้นอาจใช้ไม่ได้ผลในทุกสถานการณ์ อาจมีบางครั้งที่ไคลเอนต์ติดต่อกับเซิร์ฟเวอร์หลายตัวพร้อมกัน ตัวอย่างด้านล่างแสดงให้เห็นว่าไคลเอนต์ติดต่อกับทั้งฐานข้อมูลและเว็บเซิร์ฟเวอร์ในเวลาเดียวกัน ในกรณีเช่นนี้ ข้อมูลทั้งหมดอาจไม่สามารถส่งผ่านโปรโตคอล HTTPS ได้
นี่คือจุดที่ SOAP เข้ามามีบทบาทเพื่อเอาชนะอุปสรรคดังกล่าวโดยการใช้ข้อกำหนดด้านความปลอดภัยของ WS (WS Security Specification) ด้วยข้อกำหนดนี้ ข้อมูลที่เกี่ยวข้องกับความปลอดภัยทั้งหมดจะถูกกำหนดไว้ในส่วนหัวของ SOAP ส่วนหัวสามารถประกอบด้วยข้อมูลดังต่อไปนี้:
- หากข้อความภายในเนื้อหา SOAP ได้รับการลงนามด้วยคีย์ความปลอดภัยใดๆ คีย์นั้นสามารถกำหนดได้ในองค์ประกอบส่วนหัว
- หากส่วนใดส่วนหนึ่งในเนื้อหา SOAP ถูกเข้ารหัส ส่วนหัวจะประกอบด้วยกุญแจเข้ารหัสที่จำเป็นเพื่อให้สามารถถอดรหัสข้อความได้เมื่อถึงปลายทาง
ในสภาพแวดล้อมที่มีเซิร์ฟเวอร์หลายตัว เทคนิคการตรวจสอบสิทธิ์ SOAP ข้างต้นจะช่วยได้ในลักษณะดังต่อไปนี้:
- เนื่องจากเนื้อความ SOAP ได้รับการเข้ารหัส จึงจะสามารถถอดรหัสได้โดยเว็บเซิร์ฟเวอร์ที่โฮสต์บริการเว็บเท่านั้น นี่เป็นเพราะวิธีการออกแบบโปรโตคอล SOAP
- สมมติว่าข้อความถูกส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลผ่านคำขอ HTTP แต่ไม่สามารถถอดรหัสได้ เนื่องจากฐานข้อมูลไม่มีกลไกที่เหมาะสมในการถอดรหัส
- เฉพาะเมื่อคำขอส่งไปถึงเว็บเซิร์ฟเวอร์ในรูปแบบโปรโตคอล SOAP แล้วเท่านั้น เว็บเซิร์ฟเวอร์จึงจะสามารถถอดรหัสข้อความและส่งการตอบกลับที่เหมาะสมไปยังไคลเอ็นต์ได้
ในหัวข้อถัดไป เราจะมาดูกันว่ามาตรฐานความปลอดภัยของ WS สามารถนำไปใช้ได้อย่างไร สบู่.
มาตรฐานความปลอดภัยของบริการเว็บ
ดังที่ได้กล่าวไว้ในหัวข้อก่อนหน้านี้ มาตรฐาน WS-Security เกี่ยวข้องกับการรวมคำจำกัดความด้านความปลอดภัยไว้ในส่วนหัว SOAP โดยข้อมูลประจำตัวในส่วนหัว SOAP จะถูกจัดการใน 2 วิธี
ประการแรก ระบบจะกำหนดองค์ประกอบพิเศษที่เรียกว่า UsernameToken ซึ่งใช้ในการส่งชื่อผู้ใช้และรหัสผ่านไปยังเว็บเซอร์วิส อีกวิธีหนึ่งคือการใช้ Binary Token ผ่าน BinarySecurityToken ซึ่งใช้ในสถานการณ์ที่ใช้เทคนิคการเข้ารหัส เช่น Kerberos หรือ X.509
แผนภาพด้านล่างแสดงขั้นตอนการทำงานของโมเดลความปลอดภัยใน WS Security
ขั้นตอนต่างๆ ในขั้นตอนการทำงานข้างต้นมีดังต่อไปนี้:
- สามารถส่งคำขอจากไคลเอนต์บริการเว็บไปยังบริการโทเค็นความปลอดภัยได้ บริการนี้อาจเป็นบริการเว็บระดับกลางที่สร้างขึ้นโดยเฉพาะเพื่อจัดหาชื่อผู้ใช้/รหัสผ่านหรือใบรับรองให้กับบริการเว็บ SOAP จริง
- โทเค็นการรักษาความปลอดภัยจะถูกส่งไปยังไคลเอ็นต์บริการเว็บแล้ว
- จากนั้นไคลเอ็นต์บริการเว็บจะเรียกใช้บริการเว็บ แต่ในครั้งนี้จะต้องตรวจสอบให้แน่ใจว่าได้ฝังโทเค็นความปลอดภัยไว้ในข้อความ SOAP แล้ว
- จากนั้นบริการบนเว็บจะเข้าใจข้อความ SOAP ด้วยโทเค็นการรับรองความถูกต้อง จากนั้นจึงสามารถติดต่อบริการโทเค็นความปลอดภัยเพื่อดูว่าโทเค็นความปลอดภัยนั้นเป็นของแท้หรือไม่
ตัวอย่างด้านล่างแสดงรูปแบบของส่วนการตรวจสอบสิทธิ์ ซึ่งเป็นส่วนหนึ่งของเอกสาร WSDL จากตัวอย่างด้านล่าง ข้อความ SOAP จะมีองค์ประกอบเพิ่มเติมอีก 2 ส่วน คือ ชื่อผู้ใช้ และ รหัสผ่าน
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
เมื่อมีการส่งข้อความ SOAP ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ ส่วนของข้อความที่ประกอบด้วยข้อมูลประจำตัวผู้ใช้จะมีลักษณะดังที่แสดงด้านบน ชื่อองค์ประกอบ wsse เป็นชื่อองค์ประกอบพิเศษที่กำหนดไว้สำหรับ SOAP และหมายความว่าองค์ประกอบนี้มีข้อมูลที่เกี่ยวข้องกับความปลอดภัย
วิธีสร้างบริการเว็บที่ปลอดภัย
ต่อไปนี้เราจะมาดูตัวอย่างการรักษาความปลอดภัยของเว็บเซอร์วิส SOAP กัน เราจะสร้างระบบรักษาความปลอดภัยของเว็บเซอร์วิสโดยอิงจากตัวอย่างที่แสดงไว้ก่อนหน้านี้ในบท SOAP และจะเพิ่มเลเยอร์การรักษาความปลอดภัยเข้าไป
ในตัวอย่างนี้ เราจะสร้างเว็บเซอร์วิสอย่างง่าย ซึ่งจะใช้ในการส่งสตริงกลับไปยังแอปพลิเคชันที่เรียกใช้เว็บเซอร์วิสนั้น แต่ในครั้งนี้ เมื่อมีการเรียกใช้เว็บเซอร์วิส จะต้องระบุข้อมูลรับรองให้กับบริการที่เรียกใช้ด้วย เรามาทำตามขั้นตอนด้านล่างเพื่อสร้างเว็บเซอร์วิส SOAP และเพิ่มคำจำกัดความด้านความปลอดภัยลงไปกัน
ขั้นตอน 1) ขั้นตอนแรกคือการสร้างช่องว่าง Asp.Net แอปพลิเคชันเว็บ จาก Visual Studio 2013 คลิกที่ตัวเลือกเมนู File->New project
เมื่อคุณคลิกที่ตัวเลือก New Project แล้ว Visual Studio จะแสดงกล่องโต้ตอบอีกอันให้คุณเลือกประเภทของโครงการและให้รายละเอียดที่จำเป็นของโครงการ ซึ่งจะอธิบายในขั้นตอนต่อไป
ขั้นตอน 2) ในขั้นตอนนี้
- ตรวจสอบให้แน่ใจว่าคุณเลือก C# เทมเพลตเว็บสำหรับแอปพลิเคชันเว็บ ASP.NET โครงการต้องเป็นประเภทนี้จึงจะสามารถสร้างโครงการเว็บเซอร์วิสได้ เมื่อเลือกตัวเลือกนี้ Visual Studio จะดำเนินการขั้นตอนที่จำเป็นเพื่อเพิ่มไฟล์ที่จำเป็นสำหรับแอปพลิเคชันบนเว็บทุกประเภท
- ตั้งชื่อโครงการของคุณซึ่งในกรณีของเราได้รับเป็น “เว็บเซอร์วิส.asmxจากนั้นอย่าลืมระบุตำแหน่งที่จะจัดเก็บไฟล์โครงการด้วย
เมื่อดำเนินการเสร็จสิ้น คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นใน Solution Explorer ของ Visual Studio 2013
ขั้นตอน 3) ในขั้นตอนนี้ เราจะเพิ่มไฟล์เว็บเซอร์วิสลงในโปรเจ็กต์ของเรา
- ขั้นแรก ให้คลิกขวาที่ไฟล์โปรเจ็กต์ดังที่แสดงด้านล่าง
- เมื่อคุณคลิกขวาที่ไฟล์โปรเจ็กต์ คุณจะมีโอกาสเลือกตัวเลือก “เพิ่ม->บริการเว็บ (ASMX)” เพื่อเพิ่มไฟล์บริการเว็บ เพียงตั้งชื่อไฟล์บริการเว็บว่า Tutorial Service
ขั้นตอนข้างต้นจะแสดงกล่องโต้ตอบขึ้นมา ซึ่งคุณสามารถป้อนชื่อไฟล์เว็บเซอร์วิสได้ ดังนั้นในกล่องโต้ตอบด้านล่าง ให้ป้อนชื่อ TutorialService เป็นชื่อไฟล์
ขั้นตอน 4) เพิ่มโค้ดต่อไปนี้ลงในไฟล์ asmx ของ Tutorial Service โค้ดสั้นๆ ด้านล่างนี้ใช้เพื่อเพิ่มคลาสที่กำหนดเองซึ่งจะใช้ในการเปลี่ยนส่วนหัว SOAP เมื่อสร้างข้อความ SOAP เนื่องจากเราต้องการเพิ่มข้อมูลรับรองความปลอดภัยลงในส่วนหัว SOAP จึงจำเป็นต้องดำเนินการตามขั้นตอนนี้
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code คำอธิบาย:
- ตอนนี้เรากำลังสร้างคลาสแยกต่างหากที่เรียกว่า AuthHeader ซึ่งเป็นประเภท คลาส SoapHeaderเมื่อใดก็ตามที่คุณต้องการเปลี่ยนแปลงสิ่งที่ส่งผ่านในส่วนหัว SOAP คุณจะต้องสร้างคลาสที่ใช้คลาส SoapHeader ในตัวของ .NET การปรับแต่งส่วนหัว SOAP ทำให้เราสามารถส่ง 'ชื่อผู้ใช้' และ 'รหัสผ่าน' เมื่อมีการเรียกใช้เว็บเซอร์วิสได้แล้ว
- จากนั้นเราจะกำหนดตัวแปรของ 'ชื่อผู้ใช้' และ 'รหัสผ่าน' ซึ่งเป็นประเภทสตริง พวกเขาจะใช้เพื่อเก็บชื่อผู้ใช้และรหัสผ่านที่ส่งไปยังบริการเว็บ
ขั้นตอน 5) ในขั้นตอนถัดไปจะต้องเพิ่มโค้ดต่อไปนี้ลงในไฟล์เดียวกัน ไฟล์ TutorialService.asmxโค้ดนี้เป็นการกำหนดฟังก์ชันของเว็บเซอร์วิสของเรา ฟังก์ชันนี้จะส่งคืนสตริง "นี่คือ" Guru99. บริการเว็บ” ไปยังไคลเอ็นต์ แต่ในครั้งนี้ สตริงจะถูกส่งกลับมาก็ต่อเมื่อแอปพลิเคชันไคลเอ็นต์ส่งข้อมูลประจำตัวไปยังบริการเว็บเท่านั้น
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else return "This is a Guru99 Web service"; }
Code คำอธิบาย:
- ที่นี่ เรากำลังสร้างออบเจ็กต์ของคลาส AuthHeader ซึ่งสร้างขึ้นในขั้นตอนก่อนหน้า วัตถุนี้จะถูกส่งไปยังของเรา Guru99เว็บเซอร์วิส โดยสามารถตรวจสอบชื่อผู้ใช้และรหัสผ่านได้อย่างใกล้ชิด
- ขณะนี้มีการใช้แอตทริบิวต์ [SoapHeader] เพื่อระบุว่าเมื่อมีการเรียกใช้บริการบนเว็บ จำเป็นต้องมีชื่อผู้ใช้และรหัสผ่านที่ส่งผ่าน
- ในส่วนของโค้ดนี้ เรากำลังตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ส่งมาเมื่อมีการเรียกใช้เว็บเซอร์วิส หากชื่อผู้ใช้เท่ากับ “Guru99” และรหัสผ่านเท่ากับ “Guru99Password” จากนั้นข้อความ “นี่คือ Guruข้อความ "99 Web service" จะถูกส่งไปยังไคลเอ็นต์ มิฉะนั้น ระบบจะส่งข้อผิดพลาดไปยังไคลเอ็นต์หากป้อนรหัสผู้ใช้และรหัสผ่านไม่ถูกต้อง
หากโค้ดถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันโค้ดในเบราว์เซอร์
Output:
ผลลัพธ์ข้างต้นแสดงขึ้นเมื่อโปรแกรมทำงาน ซึ่งหมายความว่าขณะนี้สามารถใช้งานเว็บเซอร์วิสได้แล้ว ลองคลิกที่ Service ดูครับ Descriptลิงค์ไอออน
จากคำอธิบายบริการ คุณจะเห็นว่าชื่อผู้ใช้และรหัสผ่านเป็นองค์ประกอบของ wsdl ไฟล์. จำเป็นต้องส่งพารามิเตอร์เหล่านี้เมื่อมีการเรียกใช้บริการเว็บ
แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของบริการเว็บ
ต่อไปนี้คือข้อควรพิจารณาด้านความปลอดภัยที่ควรคำนึงถึงเมื่อใช้งานเว็บเซอร์วิส:
- การตรวจสอบและการจัดการบันทึก – ใช้การบันทึกข้อมูลแอปพลิเคชันเพื่อบันทึกคำขอทั้งหมดที่เข้ามายังเว็บเซอร์วิส วิธีนี้จะให้รายงานโดยละเอียดเกี่ยวกับผู้ที่เรียกใช้เว็บเซอร์วิส และช่วยในการวิเคราะห์ผลกระทบหากเกิดการละเมิดความปลอดภัยขึ้น
- ลำดับการเรียกใช้บริการเว็บ – พยายามสังเกตลำดับการเรียกใช้บริการเว็บ โดยปกติแล้ว แอปพลิเคชันสามารถเรียกใช้บริการเว็บได้หลายรายการ โดยมีการส่งโทเค็นการตรวจสอบสิทธิ์ระหว่างบริการเว็บเหล่านั้น การเรียกใช้บริการเว็บทั้งหมดจำเป็นต้องได้รับการตรวจสอบและบันทึกไว้
- ข้อมูลที่ละเอียดอ่อน – ห้ามบันทึกข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่าน หมายเลขบัตรเครดิต หรือข้อมูลที่เป็นความลับอื่นๆ ลงในบันทึกเหตุการณ์ หากมีเหตุการณ์ใดที่มีข้อมูลเหล่านี้อยู่ จะต้องลบข้อมูลนั้นทิ้งก่อนบันทึก
- Tracธุรกิจ k Operations - Track การดำเนินงานทางธุรกิจที่สำคัญ ตัวอย่างเช่น ติดตั้งเครื่องมือในแอปพลิเคชันของคุณเพื่อบันทึกการเข้าถึงวิธีการและตรรกะทางธุรกิจที่มีความละเอียดอ่อนเป็นพิเศษ ลองพิจารณาตัวอย่างร้านค้าออนไลน์ping กระบวนการสมัครใช้งานนั้นมีหลายขั้นตอน โดยทั่วไปแล้วการสมัครใช้งานจะมีหลายขั้นตอน เช่น การเลือกสินค้าที่จะซื้อ การเพิ่มสินค้าลงในตะกร้า และการชำระเงินขั้นสุดท้าย กระบวนการทำงานทางธุรกิจทั้งหมดนี้จำเป็นต้องมีระบบจัดการที่ดี tracถูกกำหนดโดยบริการเว็บ
- การตรวจสอบสิทธิ์ที่ถูกต้อง – การตรวจสอบสิทธิ์คือกลไกที่ไคลเอ็นต์สามารถยืนยันตัวตนกับเว็บเซอร์วิสโดยใช้ชุดข้อมูลประจำตัวที่สามารถพิสูจน์ตัวตนนั้นได้ ไม่ควรเก็บรักษาข้อมูลประจำตัวของผู้ใช้ และดังนั้น หากใช้ WS Security ในการเรียกใช้เว็บเซอร์วิส ต้องสังเกตว่าเว็บเซอร์วิสไม่ควรเก็บรักษาข้อมูลประจำตัวที่ส่งมาในส่วนหัว SOAP ควรลบทิ้งโดยเว็บเซอร์วิส














