มาตรการรักษาความปลอดภัยสำหรับการเขียนโปรแกรมเครือข่ายใน Delphi
การควบคุม MIDAS ของ Delphi เป็นวิธีที่สะดวกมากในการเขียนโปรแกรมเครือข่าย การใช้การควบคุมเหล่านี้ทำให้คุณสามารถเขียนโปรแกรมระบบไคลเอ็นต์/เซิร์ฟเวอร์บนเครือข่ายท้องถิ่นได้ และคุณยังสามารถสร้างแอปพลิเคชันการประมวลผลแบบกระจายบนอินเทอร์เน็ตได้อย่างง่ายดาย
ปัญหาสำคัญเกี่ยวกับโปรแกรมเครือข่ายคือข้อควรพิจารณาด้านความปลอดภัย ข้อมูลที่ละเอียดอ่อนบางส่วนถูกส่งทางออนไลน์และอาจถูกดักจับอย่างผิดกฎหมาย ทำให้เกิดการสูญเสียโดยไม่จำเป็น ในกระบวนการเขียนโปรแกรมจริง ฉันใช้มาตรการป้องกันที่มีประสิทธิผล ซึ่งฉันจะแนะนำสั้นๆ ที่นี่
1. หลักการ
ปัจจุบันมีหลายวิธีในการเข้ารหัสข้อมูลซึ่งมีบทบาทในการปกป้องข้อมูล อย่างไรก็ตาม หากใช้คีย์คงที่หรือคีย์ถูกส่งไปพร้อมกับข้อมูล จะไม่สามารถบรรลุผลการรักษาความลับที่น่าพอใจได้ ในทางปฏิบัติ ฉันพบชุดวิธีการสุ่มคีย์ในโหมด "คำขอ-ตอบกลับ" ซึ่งน่าพอใจมากสำหรับการเก็บรหัสผ่านและข้อมูลเป็นความลับ
เมื่อโปรแกรมไคลเอนต์เริ่มต้นและพยายามสร้างการเชื่อมต่อกับโปรแกรมเซิร์ฟเวอร์ โปรแกรมไคลเอนต์จะได้รับสตริงสุ่มที่สร้างโดยโปรแกรมเซิร์ฟเวอร์จากเซิร์ฟเวอร์ ระบบจะใช้สตริงนี้เป็นกุญแจสำคัญในการส่งรหัสผ่านและข้อมูลการเข้าสู่ระบบของผู้ใช้ เนื่องจากโปรแกรมเซิร์ฟเวอร์สร้างคีย์แบบสุ่ม คีย์จึงแตกต่างกันทุกครั้งที่ลูกค้าเข้าสู่ระบบ ซึ่งช่วยลดโอกาสที่จะมีการสกัดกั้นรหัสผ่านที่นำไปสู่การขโมยข้อมูลได้อย่างมาก
เซิร์ฟเวอร์สามารถแนะนำอินเทอร์เฟซแบบกำหนดเองในโมดูลข้อมูลระยะไกล ซึ่งจะส่งคืนสตริงแบบสุ่ม โมดูลข้อมูลระยะไกลควรบันทึกสตริงนี้เป็นคีย์สำหรับการประมวลผลในภายหลัง คุณสามารถสร้างสตริงสุ่มได้หลายวิธี วิธีที่ง่ายที่สุดคือการใช้ฟังก์ชัน Random() เพื่อสร้างตัวเลขสุ่ม จากนั้นใช้ฟังก์ชัน Format() หรือ IntToStr() เพื่อสร้างสตริงจากตัวเลขนี้
2. มาตรการการเข้าสู่ระบบของผู้ใช้
เพื่อป้องกันไม่ให้โปรแกรมถูกดีบั๊กอย่างผิดกฎหมายและทำให้รหัสผ่านรั่วไหล ข้อมูลการเข้าสู่ระบบของลูกค้าจะต้องได้รับการประมวลผลบนฝั่งเซิร์ฟเวอร์ หรือสามารถเพิ่มชั้นความปลอดภัยโดยเฉพาะเพื่อรับผิดชอบในการเข้าสู่ระบบของลูกค้า ข้อมูลการเข้าสู่ระบบของลูกค้าจะถูกจัดเก็บไว้ในตารางข้อมูลลูกค้า รวมถึงชื่อผู้ใช้ รหัสผ่าน การอนุญาต และข้อมูลอื่นๆ
เมื่อโปรแกรมไคลเอนต์เข้าสู่ระบบ ก่อนอื่นจะเรียกอินเทอร์เฟซของโปรแกรมเซิร์ฟเวอร์เพื่อรับสตริงคีย์ และใช้คีย์นี้เพื่อเข้ารหัสชื่อผู้ใช้และรหัสผ่านที่ผู้ใช้ป้อน และส่งข้อมูลการเข้าสู่ระบบไปยังเซิร์ฟเวอร์ อัลกอริธึมการเข้ารหัสอาจเป็นอัลกอริธึม DES หรืออัลกอริธึมที่มีประสิทธิภาพอื่น ๆ หลังจากได้รับข้อมูลการเข้าสู่ระบบ เซิร์ฟเวอร์จะถอดรหัสข้อมูลการเข้าสู่ระบบด้วยคีย์สุ่มที่สร้างและบันทึกไว้ก่อนหน้านี้ จากนั้นเปรียบเทียบข้อมูลที่ถอดรหัสกับข้อมูลในตารางข้อมูลลูกค้าที่เก็บไว้เพื่อตรวจสอบว่าข้อมูลลูกค้าถูกกฎหมายหรือไม่ และการอนุญาตข้อมูลลูกค้า มีความสุข ฯลฯ
โปรแกรมไคลเอนต์สำหรับกระบวนการนี้เป็นดังนี้:
strKey:=myRemoteSever.GetKey();
{เรียกอินเทอร์เฟซของเซิร์ฟเวอร์เพื่อรับคีย์สุ่ม}
ชื่อผู้ใช้:=Ency(strUserName
strKey);
{เข้ารหัสชื่อผู้ใช้ Ency() คืออัลกอริธึมการเข้ารหัส}
รหัสผ่าน:=Ency(strPassword
strKey);
{เข้ารหัสรหัสผ่านเข้าสู่ระบบ}
ถ้า myRemoteServer.LogIn(UserName
รหัสผ่าน) จากนั้น {เข้าสู่ระบบ}
เริ่ม
{กระบวนการ}
จบ;
กระบวนการเข้าสู่ระบบฝั่งเซิร์ฟเวอร์ LogIn() เป็นดังนี้:
strUserName:=DeEncy(UserName
strKey);
{ถอดรหัสชื่อผู้ใช้ DeEncy() เป็นอัลกอริทึมการถอดรหัส}
strPassword:=DeEncy(Password
strKey);
{ถอดรหัสรหัสผ่านเข้าสู่ระบบ}
{ฐานข้อมูลแบบสอบถาม}
ถ้า (ผ่าน) แล้ว
ผลลัพธ์:=จริง
อื่น
ผลลัพธ์:=เท็จ;
ควรสังเกตว่า StrKey ควรถูกกำหนดให้เป็นตัวแปรส่วนกลางทั้งในโปรแกรมเซิร์ฟเวอร์และโปรแกรมไคลเอนต์
เพื่อป้องกันไม่ให้ตารางข้อมูลลูกค้าถูกเปิดนอกโปรแกรมและทำให้รหัสผ่านรั่วไหล มาตรการการเข้ารหัสบางอย่างสามารถนำไปใช้กับข้อมูลลูกค้าได้ ตัวอย่างเช่น สามารถเพิ่มรหัสผ่านลงในตาราง PARADOX และโปรแกรมเซิร์ฟเวอร์จะจัดเตรียมไว้ให้ก่อน รหัสผ่านเมื่อเข้าสู่ตารางข้อมูลลูกค้า
3. การส่งข้อมูล
ในแอปพลิเคชันเครือข่าย ข้อมูลที่ละเอียดอ่อนบางอย่างจะต้องได้รับการเข้ารหัสเมื่อส่งผ่านอินเทอร์เน็ต กลไก MIDAS ของ Delphi มีวิธีการเข้ารหัสข้อมูล โดยสามารถเข้ารหัสบางฟิลด์ก่อนที่ข้อมูลจะถูกส่งไปยังไคลเอนต์ นอกจากนี้ยังสามารถถอดรหัสฟิลด์ที่เกี่ยวข้องของข้อมูลจากไคลเอนต์หลังจากได้รับคำขอข้อมูลอัพเดตของลูกค้าก่อนที่จะส่งไปยังฐานข้อมูล ทำการอัพเดต เพื่อให้บรรลุเป้าหมายเหล่านี้ คุณสามารถเพิ่มออบเจ็กต์ TPRovider หรือ TdataSetProvider ให้กับโมดูลข้อมูลระยะไกลของโปรแกรมเซิร์ฟเวอร์ และตั้งค่าคุณสมบัติ DataSet ของออบเจ็กต์นี้เป็นชุดข้อมูลที่จะประมวลผล เพิ่มรหัสต่อไปนี้ลงในเหตุการณ์ OnGetData ของ Tprovider:
ด้วย DataSet ทำ
เริ่ม
ในขณะที่ EOF ไม่ได้ทำ
เริ่ม
แก้ไข;
SensitiveData.AsString :=
Ency(SensitiveData.AsString
strKey);
{เข้ารหัสข้อมูลที่ละเอียดอ่อน}
โพสต์;
ต่อไป;
จบ;
จบ;
โค้ดด้านบนสามารถเข้ารหัสข้อมูลที่ละเอียดอ่อนก่อนที่จะส่งไปยังโปรแกรมไคลเอนต์
ในทำนองเดียวกัน การเพิ่มโค้ดประมวลผลบางส่วนให้กับเหตุการณ์ OnUpdateData ของ Tprovider สามารถถอดรหัสข้อมูลที่ส่งโดยไคลเอ็นต์ได้
ข้างต้นเป็นเพียงการแนะนำหลักการทั่วไปของการใช้มาตรการรักษาความปลอดภัยสำหรับโปรแกรมเครือข่าย บนพื้นฐานนี้ คุณสามารถเพิ่มมาตรการการรักษาความลับอื่นๆ เพื่อให้บรรลุผลการรักษาความลับที่ดีขึ้น ตัวอย่างเช่น โปรแกรมไคลเอนต์สามารถใช้อุปกรณ์ฮาร์ดแวร์เสริมเฉพาะเพื่อเพิ่มความปลอดภัย ในแอปพลิเคชันสมาร์ทการ์ด โปรแกรมไคลเอ็นต์ไม่เพียงแต่ต้องการให้ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านเมื่อเข้าสู่ระบบเท่านั้น โปรแกรมยังตรวจสอบประเภทและเนื้อหาเฉพาะของการ์ด IC ในเครื่องอ่าน IC ด้วยวิธีนี้ แม้ว่าจะเป็นเช่นนั้นก็ตาม รหัสผ่านรั่วไหล จะไม่มีใครเข้าสู่ระบบแอบอ้าง แน่นอนว่าไม่มีมาตรการรักษาความปลอดภัยใดที่ปลอดภัยอย่างแน่นอน มาตรการรักษาความปลอดภัยจะต้องมีระบบการรักษาความลับที่เข้มงวดและการรับรู้การรักษาความลับในระดับสูงจากผู้ใช้เพื่อรักษาความลับอย่างแท้จริง