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

1. กำหนดความหมายของ “View-Only”
เริ่มต้นด้วยนโยบายที่ชัดเจน ทีมต่าง ๆ อาจใช้คำว่า “view-only” เพื่อหมายถึง:
- ไม่ให้ไฟล์ต้นฉบับเป็นการดาวน์โหลด
- ไม่แสดงการส่งออก
- ไม่อนุญาตพิมพ์
- อนุญาตให้ดูเฉพาะระหว่างเซสชันที่ได้รับอนุญาต
- ป้องกันไม่ให้ผู้ใช้เข้าถึงตำแหน่งจัดเก็บโดยตรง
- เพิ่มบันทึกการตรวจสอบเมื่อเปิดเอกสาร
เหล่านี้เป็นการควบคุมที่แยกจากกัน ให้ตัดสินใจว่าต้องการใช้ข้อใดบ้างและตรวจสอบให้แน่ใจว่าผลิตภัณฑ์ Doconut, ปลั๊กอินและไลเซนส์ที่เลือกสนับสนุนพฤติกรรมของตัวดูที่คุณต้องการ
อย่าให้สัญญาว่าเอกสารที่มองเห็นได้จะไม่ถูกจับภาพได้เลย การถ่ายภาพหน้าจอ, กล้อง, เครื่องมือการเข้าถึง, ความสามารถของเบราว์เซอร์ และการเข้าถึงพิกเซลที่แสดงอยู่โดยผู้ใช้ที่ได้รับอนุญาต ทำให้การป้องกันแบบสมบูรณ์เป็นเรื่องที่เป็นไปไม่ได้ในทางปฏิบัติ
2. ปกป้องไฟล์ต้นฉบับ
ไฟล์ต้นฉบับควรอยู่ในที่จัดเก็บที่ได้รับการปกป้องบนเซิร์ฟเวอร์
ใช้:
- ตัวระบุเอกสารที่สร้างโดยเซิร์ฟเวอร์
- สิทธิ์การจัดเก็บที่จำกัด
- การเข้ารหัสขณะพักตามที่ต้องการ
- นโยบายการเก็บรักษาที่มีเอกสารอธิบาย
- สิทธิ์แยกต่างหากสำหรับอัปโหลด, ดู, ส่งออก, และการดูแลระบบ
ห้ามส่งข้อมูลรับรองการจัดเก็บ, เส้นทางไฟล์ที่ไม่จำกัด, หรือ URL สาธารณะถาวรให้กับไคลเอนต์
3. อนุญาตทุกคำขอเอกสาร
ใน ASP.NET Core ให้ปกป้องเส้นทางตัวดูด้วยกลไกการยืนยันตัวตนและการอนุญาตมาตรฐาน
เซิร์ฟเวอร์ควรตรวจสอบ:
- ผู้ใช้ได้รับการยืนยันตัวตน
- เอกสารมีอยู่จริง
- ผู้ใช้ได้รับอนุญาตให้ดูเอกสารนั้น
- การกระทำที่ร้องขอได้รับอนุญาตตามบทบาทของผู้ใช้และสถานะกระบวนการทำงานปัจจุบัน
แอตทริบิวต์ [Authorize] สามารถปกป้องเส้นทางได้ ส่วนนโยบาย, คลม, หรือการอนุญาตแบบทรัพยากรสามารถทำการตัดสินใจเฉพาะเอกสารได้
การอนุญาตต้องครอบคลุมทุก endpoint ที่ส่งคืนข้อมูลเอกสาร, หน้า, การส่งออก, คำอธิบาย, หรือผลลัพธ์การพิมพ์ การปกป้องเพียงหน้าแรกเท่านั้นจะทำให้เส้นทางอื่น ๆ ยังคงเปิดให้เข้าถึงได้
4. แยกสิทธิ์การดูและการดาวน์โหลด
กำหนดสิทธิ์อย่างชัดเจนแทนการสรุปจากการซ่อนปุ่ม
ตัวอย่าง:
CanViewDocumentCanDownloadOriginalCanExportDocumentCanPrintDocumentCanManageDocument
ชื่อเหล่านี้อธิบายนโยบายของแอปพลิเคชัน ไม่ใช่ API ของ Doconut ชั้นการอนุญาตของคุณควรประเมินสิทธิ์เหล่านี้บนเซิร์ฟเวอร์ก่อนดำเนินการที่สอดคล้องกัน
ผู้ดูแลระบบอาจมีสิทธิ์ดาวน์โหลดได้ ในขณะที่ผู้ใช้ที่ยืนยันตัวตนอื่น ๆ มีเพียงสิทธิ์ดู ทั้งสองสามารถใช้หน้าแอปเดียวกันได้ แต่ได้รับความสามารถที่ได้รับการอนุญาตต่างกัน
5. กำหนดค่าตัวดูจากเอกสารอย่างเป็นทางการ
ใช้ชื่อคอนฟิกและขั้นตอนการรวมที่มีเอกสารอธิบายสำหรับเวอร์ชัน Doconut ที่ติดตั้งในแอปของคุณเท่านั้น
หน้า Doconut Viewer ที่ได้รับการตรวจสอบให้ข้อมูลผลิตภัณฑ์ล่าสุด ส่วนหน้า Doconut download and documentation ให้แหล่งข้อมูลการติดตั้งและตัวอย่างตามเวอร์ชัน
หากผลิตภัณฑ์ที่ติดตั้งเปิดให้มีการตั้งค่าที่สนับสนุนการซ่อนหรือปิดการทำงานของปุ่มดาวน์โหลด:
- ใช้ตามเอกสารอย่างเป็นทางการ
- ถือว่าเป็นการควบคุมส่วนติดต่อผู้ใช้และกระบวนการทำงาน
- รักษา endpoint ของเซิร์ฟเวอร์ที่เกี่ยวข้องให้ปลอดภัย
- ทดสอบว่าผู้ใช้ที่ไม่ได้รับอนุญาตไม่สามารถข้ามผ่านด้วยการร้องขอโดยตรงได้
ห้ามคัดลอกคุณสมบัติคอนฟิกที่คาดเดาจากบทความที่ไม่เกี่ยวข้องและสันนิษฐานว่ามีการสนับสนุน
6. เก็บการรวมตัวดูไว้หลังบริการ
บริการแอปพลิเคชันเฉพาะสามารถทำได้:
- ค้นหาเอกสารที่ได้รับอนุญาต
- เปิดผ่านการนามธรรมการจัดเก็บที่ได้รับการอนุมัติ
- ใช้การกำหนดค่าตัวดูที่สนับสนุน
- ปล่อย
Streamและทรัพยากรชั่วคราว - บันทึกเหตุการณ์ตรวจสอบที่ทำความสะอาดแล้ว
- ส่งคืนข้อผิดพลาดที่ปลอดภัยให้กับคอนโทรลเลอร์
วิธีนี้ทำให้รายละเอียดเฉพาะ SDK ไม่หลุดออกมานอกนโยบายการอนุญาตและโค้ดการนำเสนอ
ชนิดมาตรฐานของ .NET เช่น Stream, FileStream, CancellationToken และบริการที่ฉีดพึ่งพา (dependency‑injected) สามารถสร้างขอบเขตแอปพลิเคชันได้ ปฏิบัติตามเอกสารของ Doconut สำหรับการเรียกใช้ SDK
7. ใช้แนวคิด Defense in Depth
กระบวนการทำงานแบบดูอย่างเดียวอาจรวมถึง:
- การยืนยันตัวตนและการอนุญาตระดับทรัพยากร
- การแยกเครือข่ายและการจัดเก็บ
- ระยะเวลาเซสชันสั้น
- เส้นทางการส่งออกและพิมพ์ที่จำกัด
- การใส่ลายน้ำเมื่อสนับสนุนและเหมาะสม
- เหตุการณ์ตรวจสอบการเข้าถึงเอกสาร
- การจำกัดอัตราและการควบคุมความพร้อมพร้อมกัน
- กฎการเก็บรักษาและทำความสะอาดที่ชัดเจน
- การเฝ้าระวังความปลอดภัยสำหรับรูปแบบการเข้าถึงที่ผิดปกติ
ไม่มีการควบคุมเดียวที่เพียงพอ ปุ่มที่ซ่อนอยู่โดยไม่มีการปกป้องจากเซิร์ฟเวอร์เป็นช่องโหว่ที่ง่ายต่อการข้ามผ่าน
8. บันทึกการเข้าถึงโดยไม่รั่วข้อมูล
ฟิลด์ตรวจสอบที่เป็นประโยชน์รวมถึง:
- ตัวระบุเอกสารของแอปพลิเคชัน
- ตัวระบุผู้ใช้ที่ได้รับอนุญาต
- เวลา
- การกระทำที่ร้องขอ
- ผลลัพธ์
- ตัวระบุการเชื่อมโยง
- เหตุผลที่ทำความสะอาดสำหรับการปฏิเสธหรือความล้มเหลว
หลีกเลี่ยงการบันทึก:
- เนื้อหาเอกสาร
- ข้อมูลรับรองการจัดเก็บ
- โทเค็นการเข้าถึง
- URL ที่เป็นความลับ
- เส้นทางเซิร์ฟเวอร์เต็ม
- ข้อมูลส่วนบุคคลที่ไม่จำเป็น
ปกป้องบันทึกการตรวจสอบตามระดับความอ่อนไหวและข้อกำหนดการเก็บรักษา
9. ทดสอบการพยายามข้าม UI
ห้ามหยุดเพียงแค่ยืนยันว่าปุ่มบนแถบเครื่องมือไม่มีอยู่
ทดสอบว่าผู้ใช้แบบดูอย่างเดียวสามารถ:
- ขอเส้นทางไฟล์ต้นฉบับโดยตรง
- เรียกเส้นทางส่งออกหรือพิมพ์
- เปลี่ยนตัวระบุเอกสาร
- ใช้เซสชันที่หมดอายุซ้ำ
- เข้าถึงเอกสารของผู้ใช้คนอื่น
- ค้นพบ URL การจัดเก็บใน markup หรือการตอบสนองเครือข่าย
- ทำให้เกิดข้อผิดพลาดที่ละเอียดซึ่งเปิดเผยเส้นทางภายใน
- รักษาการเข้าถึงหลังจากที่สิทธิ์ของพวกเขาถูกเพิกถอน
รวมการทดสอบการอนุญาตอัตโนมัติและการทดสอบด้วยเบราว์เซอร์แบบแมนนวล
10. ตั้งความคาดหวังของผู้ใช้ให้แม่นยำ
อธิบายสิ่งที่นโยบายทำ:
- จำกัดกระบวนการดาวน์โหลดหรือส่งออกที่แอปพลิเคชันจัดหา
- จำกัดการเข้าถึงให้กับผู้ใช้ที่ได้รับอนุญาต
- อาจบันทึกเหตุการณ์การดู
- เก็บไฟล์ต้นฉบับไว้หลังการควบคุมของเซิร์ฟเวอร์
อธิบายสิ่งที่นโยบายไม่สามารถรับประกันได้:
- ไม่สามารถป้องกันการถ่ายภาพหรือสกรีนช็อตในทุกสภาพแวดล้อม
- ไม่สามารถยกเลิกข้อมูลที่ผู้ใช้เห็นและจำไว้แล้ว
- ไม่ได้แทนที่การควบคุมความปลอดภัยตามสัญญา, องค์กร หรืออุปกรณ์ปลายทาง
ความแตกต่างนี้ทำให้ผลิตภัณฑ์น่าเชื่อถือมากขึ้นและช่วยให้ผู้มีส่วนได้ส่วนเสียเลือกการควบคุมที่เหมาะสมสำหรับข้อมูลที่มีความอ่อนไหวสูง
Verification Checklist
- การดูและการดาวน์โหลดใช้สิทธิ์เซิร์ฟเวอร์แยกกัน
- ทุกคำขอเอกสารทำการอนุญาตระดับทรัพยากร
- ไฟล์ต้นฉบับไม่มี URL สาธารณะถาวร
- การตั้งค่าตัวดูมาจากเอกสารสำหรับเวอร์ชัน Doconut ที่ติดตั้ง
- การกระทำที่ซ่อนอยู่มี endpoint ของเซิร์ฟเวอร์ที่ได้รับการปกป้อง
- ข้อมูลชั่วคราวมีขั้นตอนทำความสะอาดที่กำหนดไว้
- บันทึกการตรวจสอบหลีกเลี่ยงเนื้อหาและความลับของเอกสาร
- การร้องขอโดยตรงที่ไม่ได้รับอนุญาตได้รับการทดสอบ
- การตอบสนองข้อผิดพลาดไม่เปิดเผยรายละเอียดการจัดเก็บภายใน
- คำโฆษณาผลิตภัณฑ์ไม่อ้างว่าป้องกันการคัดลอกอย่างสมบูรณ์
Where Doconut Fits
Doconut ให้ชั้นการดูแบบฝังอยู่ในแอปพลิเคชัน .NET ของคุณ ส่วนแอปพลิเคชันของคุณยังคงรับผิดชอบต่อการระบุตัวตน, การอนุญาต, สิทธิ์, การจัดเก็บ, การเก็บรักษา, การตรวจสอบ, และความจริงของสัญญา “ดูอย่างเดียว”
ประเมิน Doconut .NET document viewer SDK ตามข้อกำหนดด้านความปลอดภัยและเอกสารตัวอย่างที่เป็นตัวแทน ใช้ แหล่งข้อมูลอย่างเป็นทางการ สำหรับการตั้งค่าที่สนับสนุน แทนการพึ่งพาโค้ดที่คาดเดา
Conclusion
กระบวนการทำงานเอกสารแบบดูอย่างเดียวเป็นการออกแบบแบบ Defense‑in‑Depth ไม่ใช่แค่การตั้งค่าสถานะบูลีน ปกป้องไฟล์ต้นฉบับ, อนุญาตทุกคำขอ, แยกสิทธิ์การดูและดาวน์โหลด, ตรวจสอบการตั้งค่าตัวดูที่สนับสนุน, บันทึกการเข้าถึง, และทดสอบการพยายามข้ามอินเทอร์เฟซโดยตรง
เมื่อมีการควบคุมเหล่านี้อยู่ Doconut สามารถให้ประสบการณ์เอกสารแบบฝังได้ในขณะที่แอปพลิเคชัน ASP.NET ของคุณบังคับใช้นโยบายความปลอดภัยรอบ ๆ ตัวดูนั้น.