ฉันจะซ่อนข้อมูลที่เป็นความลับในโครงการโอเพ่นซอร์สของฉันได้อย่างไร


13

ฉันมีโครงการโอเพ่นซอร์สที่อัปโหลดไฟล์ไปยัง DropBox ท่ามกลางโฮสต์ไฟล์หลาย ๆ แห่ง ตอนนี้ฉันขูดหน้าจอสำหรับ DropBox ในการใช้ API ของพวกเขาฉันต้อง hardcode คีย์ SECRET ที่พวกเขาจัดหาให้ฉันสำหรับการตรวจสอบสิทธิ์ OAuth แต่ฉันกลัวว่ากุญแจจะไม่เป็นความลับหากใครก็ตามที่มองเห็นชัดแจ้ง

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

ฉันพบคำถามที่ยังไม่ได้ตอบที่มีปัญหาเช่นเดียวกับฉัน

แต่ฉันต้องการทราบโดยทั่วไปว่าจะซ่อนข้อมูลที่เป็นความลับในโครงการโอเพ่นซอร์สอย่างไร

ฉันมีหนึ่งความคิด

  • มีตัวยึดตำแหน่งในซอร์สโค้ดเช่น "<SECRET KEY HERE>" และเติมเฉพาะเมื่อสร้างไบนารี่สำหรับการเปิดตัว? (yuck!)

มีความคิดที่ดีหรือไม่?


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

อาจต้องการตรวจสอบคำถามนี้: programmers.stackexchange.com/questions/180957/ … - มันไม่เกี่ยวกับคีย์ DropBox API แต่ข้อความทั่วไปเหมือนกัน
tdammers

git-crypt สร้างขึ้นเพื่อคุณ :) github.com/AGWA/git-crypt
nha

คำตอบ:


14

แนวคิดพื้นฐานคือคุณไม่ต้องเช็คอินค่าที่เป็นความลับในรหัสหรือในไบนารีที่รวบรวม โดยเฉพาะถ้าโครงการเป็นโอเพ่นซอร์สคุณไม่ควรทำจริงๆ มีกลยุทธ์การกำหนดค่าหลายอย่างที่คุณสามารถทำได้เพื่อ:

ตัวยึดตำแหน่งในรหัส (ค่าฮาร์ดโค้ด)

ตัวยึดตำแหน่งในรหัส - ตามที่แนะนำ - ซึ่งมีเหตุผลและง่ายที่สุดในภาษาการเขียนโปรแกรมแบบไดนามิกเนื่องจากรหัสนั้นง่ายต่อการเปลี่ยนแปลง (โดยไม่จำเป็นต้องรวบรวม) LocalSettings.phpผมเคยเห็นจำนวนมากของโครงการมาเปิดทำเช่นนี้เช่นมีเดียวิกิกับมัน

ข้อเสียกับกลยุทธ์นี้คือการที่สำคัญคือ hardcoded ดังนั้นหากโปรแกรมนั้นถูกแจกจ่ายเป็นแบบไบนารี่ดังนั้นการมีรหัสฮาร์ดโค้ดทำให้ไม่สามารถบำรุงรักษาได้เป็นพิเศษ

ไฟล์ข้อความการกำหนดค่า

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

ในกรณีของคุณคุณสามารถสร้างkey.confไฟล์ข้อความด้วยคีย์จริงให้โปรแกรมใช้ไฟล์นั้นและปล่อยให้มันถูกละเว้นโดยการควบคุมเวอร์ชัน คุณสามารถตรวจสอบkey.conf.exampleไฟล์ข้อความด้วยรหัสปลอมและตรวจสอบสิ่งนั้นได้ ตรวจสอบให้แน่ใจว่าโปรแกรม / แอปพลิเคชันของคุณสร้างข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์สำหรับผู้ใช้ในการเพิ่มคีย์จริงในไฟล์ที่ถูกต้อง

ภาษาการเขียนโปรแกรมบางภาษามี API ที่ให้สิ่งนี้โดยอัตโนมัติสำหรับคุณเช่น:

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

ผ่านมุมมองการกำหนดค่าตามความชอบหรือแอป Back Office

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

MediaWiki แก้ไขปัญหานี้ในทำนองเดียวกันโดยการสร้างLocalSettings.phpไฟล์อัตโนมัติในกระบวนการติดตั้งครั้งแรก

เป็นที่ยอมรับว่านี่ไม่ใช่ตัวเลือกสำหรับโปรแกรมที่เรียกใช้เป็นกระบวนการพื้นหลังบริการหรือ daemons เท่านั้น อย่างไรก็ตามนั่นเป็นเหตุผลที่คุณสร้างโครงการ GUI แยกต่างหากสำหรับเหล่านี้เพื่อสร้างจุดของรายการสำหรับการบริหารและการตั้งค่าการตั้งค่าในเว็บมักจะปพลิเคชันที่เรียกว่าแอปพลิเค Back Office


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

2

วิธีที่ง่ายที่สุดคือไม่เผยแพร่ข้อมูลที่เป็นความลับ ตัวเลือกบางอย่าง:

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

ฉันใช้ตัวเลือกที่สองสำหรับการพัฒนาโอเพ่นซอร์สเพราะมันหมายความว่าคุณไม่ต้องกังวลกับการกรอกรายละเอียดก่อนสร้างหรือมีการเปลี่ยนแปลงเพียงครั้งเดียวเพื่อจำไม่ได้ที่จะกระทำ


2

หากใครบางคนมีซอร์สโค้ด (หรือรหัสไบต์ที่สามารถสร้างวิศวกรรมย้อนกลับได้) พวกเขาจะสามารถรับรหัสลับได้โดยการเรียกใช้รหัสในโปรแกรมดีบั๊กและวางจุดพักไว้ที่จุดที่คุณส่งกุญแจ

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.