บทช่วยสอนการรักษาความปลอดภัยของบริการเว็บ (WS) พร้อมตัวอย่าง SOAP

WS Security คืออะไร?

WS Security เป็นมาตรฐานที่จัดการกับความปลอดภัยเมื่อมีการแลกเปลี่ยนข้อมูลโดยเป็นส่วนหนึ่งของบริการบนเว็บ นี่เป็นคุณสมบัติหลักใน SOAP ที่ทำให้ได้รับความนิยมอย่างมากในการสร้างบริการทางเว็บ

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

ภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ

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

หนึ่งในมาตรการรักษาความปลอดภัยสำหรับ HTTP คือโปรโตคอล HTTPS HTTPS เป็นวิธีการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ผ่านทางเว็บ HTTPS ใช้ Secure Sockets layer หรือ SSL เพื่อการสื่อสารที่ปลอดภัย ทั้งไคลเอนต์และเซิร์ฟเวอร์จะมีใบรับรองดิจิทัลเพื่อระบุว่าเป็นของแท้เมื่อมีการสื่อสารเกิดขึ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์

ภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ

ในการสื่อสาร HTTPS มาตรฐานระหว่างไคลเอนต์และเซิร์ฟเวอร์ ขั้นตอนต่อไปนี้จะเกิดขึ้น

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

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

ภัยคุกคามด้านความปลอดภัยและมาตรการรับมือ

นี่คือจุดที่ SOAP เข้ามาดำเนินการเพื่อเอาชนะอุปสรรคดังกล่าวโดยจัดให้มีข้อกำหนดด้านความปลอดภัย WS ด้วยข้อกำหนดเฉพาะนี้ ข้อมูลที่เกี่ยวข้องกับความปลอดภัยทั้งหมดจะถูกกำหนดไว้ในองค์ประกอบส่วนหัว SOAP

องค์ประกอบส่วนหัวสามารถมีข้อมูลที่กล่าวถึงด้านล่าง

  1. หากข้อความภายในเนื้อหา SOAP ได้รับการลงนามด้วยคีย์ความปลอดภัยใดๆ คีย์นั้นสามารถกำหนดได้ในองค์ประกอบส่วนหัว
  2. หากมีการเข้ารหัสองค์ประกอบใดๆ ภายใน SOAP Body ส่วนหัวจะมีคีย์การเข้ารหัสที่จำเป็นเพื่อให้สามารถถอดรหัสข้อความได้เมื่อถึงปลายทาง

ในสภาพแวดล้อมเซิร์ฟเวอร์หลายเครื่อง เทคนิคการตรวจสอบสิทธิ์ SOAP ข้างต้นจะช่วยได้ในลักษณะต่อไปนี้

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

เราจะดูในหัวข้อถัดไปเกี่ยวกับวิธีการใช้มาตรฐาน WS Security สบู่.

มาตรฐานความปลอดภัยของบริการเว็บ

ตามที่กล่าวไว้ในหัวข้อก่อนหน้านี้ มาตรฐาน WS-Security เกี่ยวข้องกับการมีข้อกำหนดด้านความปลอดภัยรวมอยู่ในส่วนหัว SOAP

ข้อมูลประจำตัวในส่วนหัว SOAP ได้รับการจัดการใน 2 วิธี

ขั้นแรก จะกำหนดองค์ประกอบพิเศษที่เรียกว่า UsernameToken ใช้เพื่อส่งชื่อผู้ใช้และรหัสผ่านไปยังบริการเว็บ

อีกวิธีหนึ่งคือการใช้ Binary Token ผ่าน BinarySecurityToken ใช้ในสถานการณ์ที่ใช้เทคนิคการเข้ารหัส เช่น Kerberos หรือ X.509

แผนภาพด้านล่างแสดงขั้นตอนการทำงานของโมเดลความปลอดภัยใน WS Security

มาตรฐานความปลอดภัยของบริการเว็บ

ด้านล่างนี้เป็นขั้นตอนที่เกิดขึ้นในขั้นตอนการทำงานข้างต้น

  1. สามารถส่งคำขอจากไคลเอ็นต์บริการเว็บไปยัง Security Token Service ได้ บริการนี้อาจเป็นบริการบนเว็บระดับกลางที่สร้างขึ้นโดยเฉพาะเพื่อจัดหาชื่อผู้ใช้/รหัสผ่านหรือใบรับรองให้กับบริการเว็บ SOAP จริง
  2. โทเค็นการรักษาความปลอดภัยจะถูกส่งไปยังไคลเอ็นต์บริการเว็บแล้ว
  3. จากนั้นไคลเอนต์บริการเว็บจะเรียกบริการเว็บ แต่คราวนี้ทำให้แน่ใจว่าโทเค็นความปลอดภัยถูกฝังอยู่ในข้อความ SOAP
  4. จากนั้นบริการบนเว็บจะเข้าใจข้อความ 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) ในขั้นตอนนี้

  1. ตรวจสอบให้แน่ใจว่าคุณเลือก C# เทมเพลตเว็บสำหรับแอปพลิเคชันบนเว็บ ASP.NET โปรเจ็กต์จะต้องเป็นประเภทนี้จึงจะสร้างโปรเจ็กต์บริการเว็บได้ เมื่อเลือกตัวเลือกนี้ Visual Studio จะดำเนินการตามขั้นตอนที่จำเป็นเพื่อเพิ่มไฟล์ที่จำเป็นสำหรับแอปพลิเคชันบนเว็บ
  2. ตั้งชื่อโครงการของคุณซึ่งในกรณีของเราได้รับเป็น “บริการเว็บ.asmx.” จากนั้นตรวจสอบให้แน่ใจว่าได้ระบุตำแหน่งที่จะจัดเก็บไฟล์โครงการ

สร้างบริการเว็บที่ปลอดภัย

เมื่อเสร็จแล้ว คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นในตัวสำรวจโซลูชันใน Visual Studio 2013

สร้างบริการเว็บที่ปลอดภัย

ขั้นตอน 3) ในขั้นตอนนี้

เราจะเพิ่มไฟล์บริการเว็บในโครงการของเรา

  1. ขั้นแรกให้คลิกขวาที่ไฟล์โครงการดังที่แสดงด้านล่าง

สร้างบริการเว็บที่ปลอดภัย

  1. เมื่อคุณคลิกขวาที่ไฟล์โปรเจ็กต์ คุณจะมีโอกาสเลือกตัวเลือก “เพิ่ม->บริการเว็บ (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;

	}
}

คำอธิบายรหัส:-

  1. ตอนนี้เรากำลังสร้างคลาสแยกต่างหากที่เรียกว่า AuthHeader ซึ่งเป็นประเภท คลาส SoapHeader- เมื่อใดก็ตามที่คุณต้องการเปลี่ยนสิ่งที่ถูกส่งผ่านในส่วนหัว SOAP เราจะต้องสร้างคลาสซึ่งใช้คลาส SoapHeader ในตัวของ .Net ด้วยการปรับแต่ง SOAPheader ขณะนี้เรามีความสามารถในการส่ง 'ชื่อผู้ใช้' และ 'รหัสผ่าน' เมื่อมีการเรียกใช้บริการเว็บ
  2. จากนั้นเราจะกำหนดตัวแปรของ 'ชื่อผู้ใช้' และ 'รหัสผ่าน' ซึ่งเป็นประเภทสตริง พวกเขาจะใช้เพื่อเก็บชื่อผู้ใช้และรหัสผ่านที่ส่งไปยังบริการเว็บ

ขั้นตอน 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";
	}

คำอธิบายรหัส:-

  1. ที่นี่ เรากำลังสร้างออบเจ็กต์ของคลาส AuthHeader ซึ่งสร้างขึ้นในขั้นตอนก่อนหน้า วัตถุนี้จะถูกส่งไปยังของเรา Guru99บริการเว็บ โดยสามารถตรวจสอบชื่อผู้ใช้และรหัสผ่านได้อย่างใกล้ชิด
  2. ขณะนี้มีการใช้แอตทริบิวต์ [SoapHeader] เพื่อระบุว่าเมื่อมีการเรียกใช้บริการบนเว็บ จำเป็นต้องมีชื่อผู้ใช้และรหัสผ่านที่ส่งผ่าน
  3. ในกลุ่มโค้ดนี้ เรากำลังตรวจสอบชื่อผู้ใช้และรหัสผ่านที่ส่งผ่านเมื่อมีการเรียกใช้บริการเว็บ หากชื่อผู้ใช้เท่ากับ "Guru99" และรหัสผ่านเท่ากับ "Guru99Password" ข้อความ "นี่คือบริการเว็บ Guru99" จะถูกส่งต่อไปยังไคลเอนต์ มิฉะนั้นข้อผิดพลาดจะถูกส่งไปยังไคลเอนต์หากส่งรหัสผู้ใช้และรหัสผ่านไม่ถูกต้อง

หากโค้ดถูกดำเนินการสำเร็จ ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันโค้ดในเบราว์เซอร์

Output:

สร้างบริการเว็บที่ปลอดภัย

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

สร้างบริการเว็บที่ปลอดภัย

จากคำอธิบายบริการ คุณจะเห็นว่าชื่อผู้ใช้และรหัสผ่านเป็นองค์ประกอบของ wsdl ไฟล์. จำเป็นต้องส่งพารามิเตอร์เหล่านี้เมื่อมีการเรียกใช้บริการเว็บ

แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของบริการเว็บ

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

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

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

3. ข้อมูลที่ละเอียดอ่อน – อย่าใส่ข้อมูลที่ละเอียดอ่อนลงในรายการบันทึกของคุณ เช่น รหัสผ่าน หมายเลขบัตรเครดิต หรือข้อมูลลับอื่นๆ หากมีเหตุการณ์ใดที่มีข้อมูลดังกล่าว จะต้องลบทิ้งก่อนบันทึก

4. ติดตามธุรกิจ Operations – ติดตามการดำเนินงานทางธุรกิจที่สำคัญ ตัวอย่างเช่น ติดตั้งแอปพลิเคชันของคุณเพื่อบันทึกการเข้าถึงวิธีการและตรรกะทางธุรกิจที่ละเอียดอ่อนเป็นพิเศษ มาดูตัวอย่างแอปพลิเคชันการซื้อของออนไลน์กัน แอปพลิเคชันทั่วไปมีหลายขั้นตอน เช่น การเลือกสินค้าที่จะซื้อ การโหลดสินค้าลงในรถเข็น และการซื้อขั้นสุดท้าย เวิร์กโฟลว์ทางธุรกิจทั้งหมดนี้ต้องได้รับการติดตามโดยบริการเว็บ

5. การรับรองความถูกต้องที่เหมาะสม – การรับรองความถูกต้องเป็นกลไกที่ไคลเอนต์สามารถสร้างข้อมูลประจำตัวของตนกับบริการเว็บโดยใช้ชุดข้อมูลประจำตัวบางชุดที่สามารถพิสูจน์ตัวตนนั้นได้ เราไม่ควรจัดเก็บข้อมูลประจำตัวของผู้ใช้ และด้วยเหตุนี้ หากใช้ WS Security เพื่อเรียกบริการเว็บ จะต้องสังเกตว่าบริการบนเว็บไม่ควรจัดเก็บข้อมูลประจำตัวที่ส่งในส่วนหัว SOAP สิ่งเหล่านี้ควรถูกละทิ้งโดยบริการบนเว็บ

สรุป

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