บทช่วยสอนการรักษาความปลอดภัยของบริการเว็บ (WS) พร้อมตัวอย่าง SOAP
WS Security คืออะไร?
WS Security เป็นมาตรฐานที่จัดการกับความปลอดภัยเมื่อมีการแลกเปลี่ยนข้อมูลโดยเป็นส่วนหนึ่งของบริการบนเว็บ นี่เป็นคุณสมบัติหลักใน SOAP ที่ทำให้ได้รับความนิยมอย่างมากในการสร้างบริการทางเว็บ
ความปลอดภัยเป็นคุณลักษณะที่สำคัญในเว็บแอปพลิเคชันใดๆ เนื่องจากเว็บแอปพลิเคชั่นเกือบทั้งหมดถูกเปิดเผยต่ออินเทอร์เน็ต จึงมีโอกาสที่ภัยคุกคามด้านความปลอดภัยต่อเว็บแอปพลิเคชั่นอยู่เสมอ ดังนั้น เมื่อพัฒนาแอปพลิเคชันบนเว็บ ขอแนะนำเสมอเพื่อให้แน่ใจว่าแอปพลิเคชันได้รับการออกแบบและพัฒนาโดยคำนึงถึงความปลอดภัยเป็นหลัก
ภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ
เพื่อทำความเข้าใจภัยคุกคามความปลอดภัยที่อาจเป็นอันตรายต่อเว็บแอปพลิเคชัน เรามาดูสถานการณ์ทั่วไปของเว็บแอปพลิเคชั่น และดูวิธีการทำงานในแง่ของความปลอดภัย
หนึ่งในมาตรการรักษาความปลอดภัยสำหรับ HTTP คือโปรโตคอล HTTPS HTTPS เป็นวิธีการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ผ่านทางเว็บ HTTPS ใช้ Secure Sockets layer หรือ SSL เพื่อการสื่อสารที่ปลอดภัย ทั้งไคลเอนต์และเซิร์ฟเวอร์จะมีใบรับรองดิจิทัลเพื่อระบุว่าเป็นของแท้เมื่อมีการสื่อสารเกิดขึ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์
ในการสื่อสาร HTTPS มาตรฐานระหว่างไคลเอนต์และเซิร์ฟเวอร์ ขั้นตอนต่อไปนี้จะเกิดขึ้น
- ไคลเอ็นต์ส่งคำขอไปยังเซิร์ฟเวอร์ผ่านใบรับรองไคลเอ็นต์ เมื่อเซิร์ฟเวอร์เห็นใบรับรองไคลเอ็นต์ เซิร์ฟเวอร์จะบันทึกลงในระบบแคชเพื่อให้ทราบว่าการตอบสนองควรกลับไปที่ไคลเอ็นต์นี้เท่านั้น
- จากนั้นเซิร์ฟเวอร์จะตรวจสอบตัวเองกับไคลเอนต์โดยการส่งใบรับรอง สิ่งนี้ทำให้แน่ใจได้ว่าไคลเอนต์กำลังสื่อสารกับเซิร์ฟเวอร์ที่ถูกต้อง
- หลังจากนั้นการสื่อสารทั้งหมดระหว่างไคลเอนต์และเซิร์ฟเวอร์จะถูกเข้ารหัส สิ่งนี้ทำให้แน่ใจได้ว่าหากผู้ใช้รายอื่นพยายามทำลายการรักษาความปลอดภัยและรับข้อมูลที่จำเป็น พวกเขาจะไม่สามารถอ่านได้เนื่องจากจะถูกเข้ารหัส
แต่การรักษาความปลอดภัยประเภทข้างต้นจะไม่ทำงานในทุกสถานการณ์ อาจมีเวลาที่ไคลเอ็นต์สามารถพูดคุยกับเซิร์ฟเวอร์หลายเครื่องได้ ตัวอย่างที่ระบุด้านล่างแสดงไคลเอนต์ที่พูดคุยกับทั้งฐานข้อมูลและเว็บเซิร์ฟเวอร์ในแต่ละครั้ง ในกรณีเช่นนี้ ข้อมูลบางอย่างไม่สามารถส่งผ่านโปรโตคอล https ได้
นี่คือจุดที่ SOAP เข้ามาดำเนินการเพื่อเอาชนะอุปสรรคดังกล่าวโดยจัดให้มีข้อกำหนดด้านความปลอดภัย WS ด้วยข้อกำหนดเฉพาะนี้ ข้อมูลที่เกี่ยวข้องกับความปลอดภัยทั้งหมดจะถูกกำหนดไว้ในองค์ประกอบส่วนหัว SOAP
องค์ประกอบส่วนหัวสามารถมีข้อมูลที่กล่าวถึงด้านล่าง
- หากข้อความภายในเนื้อหา SOAP ได้รับการลงนามด้วยคีย์ความปลอดภัยใดๆ คีย์นั้นสามารถกำหนดได้ในองค์ประกอบส่วนหัว
- หากมีการเข้ารหัสองค์ประกอบใดๆ ภายใน SOAP Body ส่วนหัวจะมีคีย์การเข้ารหัสที่จำเป็นเพื่อให้สามารถถอดรหัสข้อความได้เมื่อถึงปลายทาง
ในสภาพแวดล้อมเซิร์ฟเวอร์หลายเครื่อง เทคนิคการตรวจสอบสิทธิ์ SOAP ข้างต้นจะช่วยได้ในลักษณะต่อไปนี้
- เนื่องจากเนื้อความ SOAP ได้รับการเข้ารหัส จึงจะสามารถถอดรหัสได้โดยเว็บเซิร์ฟเวอร์ที่โฮสต์บริการเว็บเท่านั้น นี่เป็นเพราะวิธีการออกแบบโปรโตคอล SOAP
- สมมติว่าถ้าข้อความถูกส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลในคำขอ HTTP ก็ไม่สามารถถอดรหัสได้เนื่องจากฐานข้อมูลไม่มีกลไกที่ถูกต้องในการทำเช่นนั้น
- เฉพาะเมื่อคำขอเข้าถึงเว็บเซิร์ฟเวอร์ในรูปแบบโปรโตคอล SOAP เท่านั้น คำขอนั้นจึงจะสามารถถอดรหัสข้อความและส่งการตอบสนองที่เหมาะสมกลับไปยังไคลเอ็นต์ได้
เราจะดูในหัวข้อถัดไปเกี่ยวกับวิธีการใช้มาตรฐาน WS Security สบู่.
มาตรฐานความปลอดภัยของบริการเว็บ
ตามที่กล่าวไว้ในหัวข้อก่อนหน้านี้ มาตรฐาน WS-Security เกี่ยวข้องกับการมีข้อกำหนดด้านความปลอดภัยรวมอยู่ในส่วนหัว SOAP
ข้อมูลประจำตัวในส่วนหัว SOAP ได้รับการจัดการใน 2 วิธี
ขั้นแรก จะกำหนดองค์ประกอบพิเศษที่เรียกว่า UsernameToken ใช้เพื่อส่งชื่อผู้ใช้และรหัสผ่านไปยังบริการเว็บ
อีกวิธีหนึ่งคือการใช้ Binary Token ผ่าน BinarySecurityToken ใช้ในสถานการณ์ที่ใช้เทคนิคการเข้ารหัส เช่น Kerberos หรือ X.509
แผนภาพด้านล่างแสดงขั้นตอนการทำงานของโมเดลความปลอดภัยใน WS Security
ด้านล่างนี้เป็นขั้นตอนที่เกิดขึ้นในขั้นตอนการทำงานข้างต้น
- สามารถส่งคำขอจากไคลเอ็นต์บริการเว็บไปยัง Security Token Service ได้ บริการนี้อาจเป็นบริการบนเว็บระดับกลางที่สร้างขึ้นโดยเฉพาะเพื่อจัดหาชื่อผู้ใช้/รหัสผ่านหรือใบรับรองให้กับบริการเว็บ 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.” จากนั้นตรวจสอบให้แน่ใจว่าได้ระบุตำแหน่งที่จะจัดเก็บไฟล์โครงการ
เมื่อเสร็จแล้ว คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นในตัวสำรวจโซลูชันใน 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; } }
คำอธิบายรหัส:-
- ตอนนี้เรากำลังสร้างคลาสแยกต่างหากที่เรียกว่า AuthHeader ซึ่งเป็นประเภท คลาส SoapHeader- เมื่อใดก็ตามที่คุณต้องการเปลี่ยนสิ่งที่ถูกส่งผ่านในส่วนหัว SOAP เราจะต้องสร้างคลาสซึ่งใช้คลาส SoapHeader ในตัวของ .Net ด้วยการปรับแต่ง SOAPheader ขณะนี้เรามีความสามารถในการส่ง 'ชื่อผู้ใช้' และ 'รหัสผ่าน' เมื่อมีการเรียกใช้บริการเว็บ
- จากนั้นเราจะกำหนดตัวแปรของ 'ชื่อผู้ใช้' และ 'รหัสผ่าน' ซึ่งเป็นประเภทสตริง พวกเขาจะใช้เพื่อเก็บชื่อผู้ใช้และรหัสผ่านที่ส่งไปยังบริการเว็บ
ขั้นตอน 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); } eise return "This is a Guru99 Web service"; }
คำอธิบายรหัส:-
- ที่นี่ เรากำลังสร้างออบเจ็กต์ของคลาส AuthHeader ซึ่งสร้างขึ้นในขั้นตอนก่อนหน้า วัตถุนี้จะถูกส่งไปยังของเรา Guru99บริการเว็บ โดยสามารถตรวจสอบชื่อผู้ใช้และรหัสผ่านได้อย่างใกล้ชิด
- ขณะนี้มีการใช้แอตทริบิวต์ [SoapHeader] เพื่อระบุว่าเมื่อมีการเรียกใช้บริการบนเว็บ จำเป็นต้องมีชื่อผู้ใช้และรหัสผ่านที่ส่งผ่าน
- ในกลุ่มโค้ดนี้ เรากำลังตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ส่งผ่านเมื่อมีการเรียกใช้บริการเว็บ หากชื่อผู้ใช้เท่ากับ "Guru99" และรหัสผ่านเท่ากับ "Guru99Password" ข้อความ "นี่คือบริการเว็บ Guru99" จะถูกส่งต่อไปยังไคลเอนต์ มิฉะนั้นข้อผิดพลาดจะถูกส่งไปยังไคลเอนต์หากส่งรหัสผู้ใช้และรหัสผ่านไม่ถูกต้อง
หากโค้ดถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันโค้ดในเบราว์เซอร์
Output:
ผลลัพธ์ข้างต้นจะแสดงขึ้นเมื่อมีการรันโปรแกรม ซึ่งหมายความว่าขณะนี้บริการบนเว็บพร้อมใช้งานแล้ว ลองคลิกที่บริการ Descriptลิงค์ไอออน
จากคำอธิบายบริการ คุณจะเห็นว่าชื่อผู้ใช้และรหัสผ่านเป็นองค์ประกอบของ wsdl ไฟล์. จำเป็นต้องส่งพารามิเตอร์เหล่านี้เมื่อมีการเรียกใช้บริการเว็บ
แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของบริการเว็บ
ต่อไปนี้เป็นข้อควรพิจารณาด้านความปลอดภัยที่ควรทราบเมื่อทำงานกับบริการเว็บ
1. การตรวจสอบและการจัดการบันทึก – ใช้การบันทึกแอปพลิเคชันเพื่อบันทึกคำขอทั้งหมดที่มาถึงบริการบนเว็บ ข้อมูลนี้ให้รายงานโดยละเอียดว่าใครเป็นผู้เรียกใช้บริการเว็บ และสามารถช่วยในการวิเคราะห์ผลกระทบได้ หากมีการละเมิดความปลอดภัยเกิดขึ้น
2. กระแสการโทรไปยังบริการเว็บ – ลองสังเกตการไหลของการโทรในบริการบนเว็บ ตามค่าเริ่มต้น แอปพลิเคชันสามารถเรียกใช้คำขอบริการเว็บหลายรายการด้วยโทเค็นการรับรองความถูกต้องที่ส่งผ่านระหว่างบริการเว็บเหล่านี้ การโทรทั้งหมดระหว่างบริการบนเว็บจำเป็นต้องได้รับการตรวจสอบและบันทึก
3. ข้อมูลที่ละเอียดอ่อน – อย่าใส่ข้อมูลที่ละเอียดอ่อนลงในรายการบันทึกของคุณ เช่น รหัสผ่าน หมายเลขบัตรเครดิต หรือข้อมูลลับอื่นๆ หากมีเหตุการณ์ใดที่มีข้อมูลดังกล่าว จะต้องลบทิ้งก่อนบันทึก
4. ติดตามธุรกิจ Operations – ติดตามการดำเนินงานทางธุรกิจที่สำคัญ ตัวอย่างเช่น ติดตั้งแอปพลิเคชันของคุณเพื่อบันทึกการเข้าถึงวิธีการและตรรกะทางธุรกิจที่ละเอียดอ่อนเป็นพิเศษ มาดูตัวอย่างแอปพลิเคชันการซื้อของออนไลน์กัน แอปพลิเคชันทั่วไปมีหลายขั้นตอน เช่น การเลือกสินค้าที่จะซื้อ การโหลดสินค้าลงในรถเข็น และการซื้อขั้นสุดท้าย เวิร์กโฟลว์ทางธุรกิจทั้งหมดนี้ต้องได้รับการติดตามโดยบริการเว็บ
5. การรับรองความถูกต้องที่เหมาะสม – การรับรองความถูกต้องเป็นกลไกที่ไคลเอนต์สามารถสร้างข้อมูลประจำตัวของตนกับบริการเว็บโดยใช้ชุดข้อมูลประจำตัวบางชุดที่สามารถพิสูจน์ตัวตนนั้นได้ เราไม่ควรจัดเก็บข้อมูลประจำตัวของผู้ใช้ และด้วยเหตุนี้ หากใช้ WS Security เพื่อเรียกบริการเว็บ จะต้องสังเกตว่าบริการบนเว็บไม่ควรจัดเก็บข้อมูลประจำตัวที่ส่งในส่วนหัว SOAP สิ่งเหล่านี้ควรถูกละทิ้งโดยบริการบนเว็บ
สรุป
- SOAP จัดเตรียมเลเยอร์เพิ่มเติมที่เรียกว่า WS Security เพื่อเพิ่มความปลอดภัยเมื่อมีการเรียกใช้บริการบนเว็บ
- สามารถเรียก WS Security ด้วยชื่อผู้ใช้หรือรหัสผ่านง่ายๆ หรือสามารถใช้กับใบรับรองไบนารีสำหรับการตรวจสอบสิทธิ์
- เราได้เห็นแล้วว่าใน สุทธิ. เราสามารถปรับแต่งบริการเว็บเพื่อให้ส่งชื่อผู้ใช้และรหัสผ่านเป็นส่วนหนึ่งขององค์ประกอบส่วนหัว SOAP