×

กรุณาใส่รหัสผ่าน

×

แก้ไข index.html

ระบบยืนยันสิทธิ์การใช้งานซอฟต์แวร์

แนวคิดการสร้างความปลอดภัยและควบคุมการใช้งานผ่านการตรวจสอบโดเมน

ภาพรวมระบบ: การควบคุมสิทธิ์ผ่านการ 'Phone Home'

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

ระบบนี้จะช่วยให้คุณสามารถจัดการลิขสิทธิ์ซอฟต์แวร์ของคุณได้อย่างเข้มงวด โดยเฉพาะอย่างยิ่งสำหรับซอฟต์แวร์ที่ต้องติดตั้งบนเซิร์ฟเวอร์ของลูกค้า (On-Premise) ซึ่งอาจมีความเสี่ยงสูงต่อการคัดลอกหรือใช้งานโดยไม่ได้รับอนุญาต การตรวจสอบสิทธิ์ที่ผูกกับโดเมนที่ใช้งานจริงจะช่วยเพิ่มความน่าเชื่อถือและความปลอดภัยให้กับผลิตภัณฑ์ของคุณ

Illustration of software licensing system

องค์ประกอบหลักของระบบ

ฝั่งโปรแกรมของลูกค้า (Client-Side Script)

สคริปต์ PHP ที่ส่งมอบให้ลูกค้า ติดตั้งบนเซิร์ฟเวอร์ของลูกค้า มีหน้าที่สื่อสารกลับไปยัง License Server ของคุณเพื่อขอการยืนยันสิทธิ์การใช้งาน โดยจะมีการส่ง License Key และข้อมูลโดเมนที่กำลังทำงานอยู่ไปยังเซิร์ฟเวอร์กลาง

ฝั่งเซิร์ฟเวอร์ยืนยันสิทธิ์ (License Server)

เซิร์ฟเวอร์ของคุณเอง ที่ทำหน้าที่เป็น API หรือเว็บเซอร์วิส เพื่อรอรับการติดต่อจากโปรแกรมของลูกค้า มีฐานข้อมูลสำหรับจัดเก็บข้อมูล License และโดเมนที่ได้รับอนุญาต เพื่อทำการตรวจสอบและยืนยันสิทธิ์

ขั้นตอนการทำงาน

  1. ลูกค้าติดตั้งโปรแกรม: ลูกค้าอัปโหลดไฟล์สคริปต์ PHP ของคุณไปยังเซิร์ฟเวอร์ของตนเอง
  2. กรอก License Key: เมื่อเข้าใช้งานครั้งแรก โปรแกรมจะแสดงหน้าจอให้ลูกค้ากรอก 'License Key' ที่คุณมอบให้
  3. ส่งข้อมูลเพื่อยืนยัน: โปรแกรมลูกค้าส่งข้อมูล 2 ส่วนไปยัง License Server: License Key และชื่อโดเมนปัจจุบัน (เช่น `$_SERVER['HTTP_HOST']`)
  4. License Server ตรวจสอบ: เซิร์ฟเวอร์ของคุณตรวจสอบ License Key ในฐานข้อมูล หากถูกต้องและยังไม่เคยผูกกับโดเมนใด ระบบจะทำการ 'จับคู่' License Key กับโดเมนที่ส่งมา และบันทึกลงฐานข้อมูล จากนั้นส่งคำตอบ 'สำเร็จ' (Success) กลับไป
  5. ปลดล็อกโปรแกรม: เมื่อโปรแกรมลูกค้าได้รับคำตอบว่า 'สำเร็จ' ฟังก์ชันการทำงานทั้งหมดจะถูกปลดล็อก

  1. โปรแกรมทำงาน: ทุกครั้งที่โปรแกรมเริ่มทำงาน หรือตามช่วงเวลาที่กำหนด (เช่น ทุก 24 ชั่วโมง)
  2. ส่งโดเมนเพื่อตรวจสอบ: โปรแกรมจะส่ง 'ชื่อโดเมน' ปัจจุบันที่กำลังทำงานอยู่ไปยัง License Server
  3. License Server ตรวจสอบ: เซิร์ฟเวอร์ของคุณตรวจสอบว่าโดเมนที่ส่งมานั้นอยู่ในรายการที่ได้รับอนุญาต (Active License) หรือไม่ และส่งคำตอบกลับ เช่น `{"status": "valid"}` หรือ `{"status": "invalid"}`
  4. โปรแกรมตัดสินใจ: หากได้รับคำตอบ 'valid' โปรแกรมทำงานต่อ หากได้รับคำตอบ 'invalid' (เช่น โดเมนไม่ตรง, License หมดอายุ) โปรแกรมจะหยุดทำงานและแสดงข้อความแจ้งเตือน

โครงสร้างข้อมูลที่ต้องจัดเก็บใน License Server

ฐานข้อมูล License Server ควรมีตารางที่เก็บข้อมูลสำคัญดังนี้:

ชื่อคอลัมน์ ประเภทข้อมูล คำอธิบาย
id INT (Primary Key) รหัสอ้างอิงเฉพาะของ License
license_key VARCHAR คีย์ลิขสิทธิ์ที่สร้างและมอบให้ลูกค้า
registered_domain VARCHAR ชื่อโดเมนที่ผูกกับ License นี้
status ENUM('active', 'expired', 'suspended', 'inactive') สถานะปัจจุบันของ License
created_at TIMESTAMP วันที่และเวลาที่สร้าง License
expires_at TIMESTAMP (Nullable) วันที่และเวลาหมดอายุของ License (ถ้ามี)
customer_email VARCHAR อีเมลของลูกค้าสำหรับติดต่อ

ข้อควรพิจารณาด้านความปลอดภัย

การออกแบบระบบยืนยันสิทธิ์ต้องคำนึงถึงวิธีการที่ผู้ใช้อาจพยายามหลีกเลี่ยงหรือแฮกระบบ:

การลบโค้ดส่วนตรวจสอบ

ผู้ใช้อาจพยายามแก้ไขไฟล์ PHP เพื่อลบโค้ดส่วนที่ติดต่อกลับไปยัง License Server

แนวทางป้องกัน:
  • Code Obfuscation: ใช้เครื่องมือเช่น ionCube Loader หรือ Zend Guard เพื่อเข้ารหัสโค้ด PHP ทำให้ยากต่อการอ่านและแก้ไข
  • ฝังการตรวจสอบในส่วนสำคัญ: กระจายตรรกะการตรวจสอบสิทธิ์ไปในฟังก์ชันหลักๆ ของโปรแกรม หากการตรวจสอบไม่ผ่าน ฟังก์ชันเหล่านั้นควรทำงานผิดพลาด หรือไม่ทำงานเลย แทนที่จะเพียงแค่แสดงข้อความ error
การหลอก Server (Spoofing)

ผู้ใช้อาจแก้ไขไฟล์ hosts บนเซิร์ฟเวอร์ของตน เพื่อให้การเรียกไปยัง License Server ของคุณถูกเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์ปลอมที่ตอบกลับว่า 'valid' เสมอ

แนวทางป้องกัน:
  • ใช้ HTTPS: การสื่อสารทั้งหมดระหว่างโปรแกรมลูกค้าและ License Server ควรใช้ HTTPS (SSL/TLS) เพื่อยืนยันตัวตนของเซิร์ฟเวอร์
  • ลายเซ็นดิจิทัล (Advanced): License Server สามารถใช้ Private Key สร้างลายเซ็นดิจิทัลสำหรับข้อมูลที่ตอบกลับมา และให้โปรแกรมลูกค้าใช้ Public Key ที่ฝังไว้ ตรวจสอบความถูกต้องของลายเซ็น เพื่อให้แน่ใจว่าข้อมูลมาจากเซิร์ฟเวอร์ของคุณจริง

การจัดการภาระงานเซิร์ฟเวอร์ (Performance)

การตรวจสอบสิทธิ์ทุกครั้งที่ผู้ใช้เข้าถึงหน้าเว็บอาจสร้างภาระให้กับ License Server ของคุณมากเกินไป

แนวทางการแก้ไข: การทำ Cache

เมื่อโปรแกรมลูกค้าตรวจสอบสิทธิ์ผ่านเป็นครั้งแรก ควรมีการสร้างไฟล์ Cache ชั่วคราว (อาจเข้ารหัส) เพื่อเก็บสถานะ 'valid' และวันหมดอายุของ Cache (เช่น 24 ชั่วโมง) ในการเข้าใช้งานครั้งถัดไป โปรแกรมจะตรวจสอบจาก Cache ก่อน หาก Cache ยังไม่หมดอายุ ก็ไม่จำเป็นต้องติดต่อ License Server อีก เป็นการลดภาระงานและเพิ่มความเร็วในการตอบสนองของโปรแกรมลูกค้าได้อย่างมาก

คำถามที่พบบ่อย (FAQ)

A1: หากลูกค้าเปลี่ยนโดเมน โปรแกรมจะส่งโดเมนใหม่ไปยัง License Server ในการตรวจสอบครั้งถัดไป หากโดเมนใหม่ไม่ตรงกับที่ลงทะเบียนไว้ ระบบจะแจ้งว่า License ไม่ถูกต้อง และโปรแกรมอาจหยุดทำงาน ลูกค้าจะต้องติดต่อผู้ให้บริการเพื่อขอเปลี่ยนโดเมนที่ลงทะเบียนไว้

A2: Code Obfuscation เป็นเพียงชั้นหนึ่งของการป้องกัน ไม่ได้ทำให้ระบบปลอดภัย 100% แต่ช่วยเพิ่มความยากในการทำวิศวกรรมย้อนกลับ (Reverse Engineering) และการแก้ไขโค้ด ควรใช้ร่วมกับมาตรการอื่นๆ เช่น การตรวจสอบสิทธิ์ที่เข้มงวด และการสื่อสารที่ปลอดภัยผ่าน HTTPS

A3: ความถี่ในการตรวจสอบขึ้นอยู่กับความสำคัญของซอฟต์แวร์และนโยบายของคุณ การตรวจสอบทุกครั้งที่โหลดหน้าเว็บอาจสร้างภาระมากเกินไป การตรวจสอบทุก 24 ชั่วโมง หรือเมื่อมีการเปลี่ยนแปลงที่สำคัญ ถือเป็นแนวทางที่สมดุลระหว่างความปลอดภัยและประสิทธิภาพ การใช้ระบบ Cache ช่วยลดความถี่ในการเรียกใช้ License Server ได้มาก