- หน้าแรก
- Documentation
- การกำหนดค่า
- การปกปิดข้อมูลลับ
การปกปิดข้อมูลลับ
ป้องกันไม่ให้ค่าที่ละเอียดอ่อน (API key, โทเค็น, รหัสผ่าน) ถูกส่งไปยังผู้ให้บริการ LLM เมื่อเปิดใช้งาน ข้อมูลลับจะถูกแทนที่ด้วยตัวแทนที่กำหนดค่าไว้ล่วงหน้าก่อนออกจากกระบวนการ และได้รับการกู้คืนในอาร์กิวเมนต์ของ tool call ที่โมเดลส่งกลับมา
การเปิดใช้งาน
หัวข้อที่มีชื่อว่า “การเปิดใช้งาน”เปิดใช้งานโดยค่าเริ่มต้น สลับการใช้งานผ่าน UI /settings หรือโดยตรงใน config.yml:
secrets: enabled: falseวิธีการทำงาน
หัวข้อที่มีชื่อว่า “วิธีการทำงาน”-
เมื่อเริ่มต้นเซสชัน ข้อมูลลับจะถูกรวบรวมจากสองแหล่ง:
- ตัวแปรสภาพแวดล้อม ที่ตรงกับรูปแบบข้อมูลลับทั่วไป (
*_KEY,*_SECRET,*_TOKEN,*_PASSWORD, ฯลฯ) โดยมีค่าที่มีความยาว >= 8 ตัวอักษร - ไฟล์
secrets.yml(ดูด้านล่าง)
- ตัวแปรสภาพแวดล้อม ที่ตรงกับรูปแบบข้อมูลลับทั่วไป (
-
ข้อความขาออกไปยัง LLM จะมีค่าข้อมูลลับทั้งหมดถูกแทนที่ด้วยตัวแทน เช่น
<<$env:S0>>,<<$env:S1>>, เป็นต้น -
อาร์กิวเมนต์ของ tool call ที่โมเดลส่งกลับมาจะถูกตรวจสอบแบบ deep-walk และตัวแทนจะได้รับการกู้คืนเป็นค่าเดิมก่อนการดำเนินการ
สองโหมดควบคุมสิ่งที่เกิดขึ้นกับข้อมูลลับแต่ละรายการ:
| โหมด | พฤติกรรม | กู้คืนได้ |
|---|---|---|
obfuscate (ค่าเริ่มต้น) | แทนที่ด้วยตัวแทนที่มีดัชนี <<$env:SN>> | ใช่ (ถอดรหัสใน tool args) |
replace | แทนที่ด้วยสตริงที่กำหนดค่าไว้ล่วงหน้าที่มีความยาวเท่ากัน | ไม่ (ทางเดียว) |
secrets.yml
หัวข้อที่มีชื่อว่า “secrets.yml”กำหนดรายการข้อมูลลับแบบกำหนดเองใน YAML โดยมีการตรวจสอบสองตำแหน่ง:
| ระดับ | เส้นทาง | วัตถุประสงค์ |
|---|---|---|
| ส่วนกลาง | ~/.xcsh/agent/secrets.yml | ข้อมูลลับสำหรับทุกโปรเจกต์ |
| โปรเจกต์ | <cwd>/.xcsh/secrets.yml | ข้อมูลลับเฉพาะโปรเจกต์ |
รายการระดับโปรเจกต์จะแทนที่รายการส่วนกลางที่มี content ตรงกัน
โครงสร้าง
หัวข้อที่มีชื่อว่า “โครงสร้าง”แต่ละรายการในอาร์เรย์มีฟิลด์ดังนี้:
| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
type | "plain" หรือ "regex" | ใช่ | กลยุทธ์การจับคู่ |
content | string | ใช่ | ค่าข้อมูลลับ (plain) หรือรูปแบบ regex (regex) |
mode | "obfuscate" หรือ "replace" | ไม่ | ค่าเริ่มต้น: "obfuscate" |
replacement | string | ไม่ | ข้อความแทนที่แบบกำหนดเอง (เฉพาะโหมด replace) |
flags | string | ไม่ | แฟล็ก regex (เฉพาะประเภท regex) |
ตัวอย่าง
หัวข้อที่มีชื่อว่า “ตัวอย่าง”ข้อมูลลับแบบ plain
หัวข้อที่มีชื่อว่า “ข้อมูลลับแบบ plain”# ปกปิด API key เฉพาะ (โหมดเริ่มต้น)- type: plain content: sk-proj-abc123def456
# แทนที่รหัสผ่านฐานข้อมูลด้วยสตริงคงที่- type: plain content: hunter2 mode: replace replacement: "********"ข้อมูลลับแบบ regex
หัวข้อที่มีชื่อว่า “ข้อมูลลับแบบ regex”# ปกปิด key รูปแบบ AWS ใดก็ได้- type: regex content: "AKIA[0-9A-Z]{16}"
# จับคู่แบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่พร้อมแฟล็กที่ระบุอย่างชัดเจน- type: regex content: "api[_-]?key\\s*=\\s*\\w+" flags: "i"
# ไวยากรณ์ regex literal (รูปแบบและแฟล็กในสตริงเดียว)- type: regex content: "/bearer\\s+[a-zA-Z0-9._~+\\/=-]+/i"รายการ regex จะสแกนแบบ global เสมอ (แฟล็ก g ถูกบังคับใช้โดยอัตโนมัติ) ไวยากรณ์ regex literal /pattern/flags รองรับเป็นทางเลือกแทนฟิลด์ content + flags แยกกัน สแลชที่ใช้ escape ภายในรูปแบบ (\\/) ได้รับการจัดการอย่างถูกต้อง
โหมด replace กับ regex
หัวข้อที่มีชื่อว่า “โหมด replace กับ regex”# แทนที่ connection strings แบบทางเดียว (กู้คืนไม่ได้)- type: regex content: "postgres://[^\\s]+" mode: replace replacement: "postgres://***"การทำงานร่วมกับการตรวจจับตัวแปรสภาพแวดล้อม
หัวข้อที่มีชื่อว่า “การทำงานร่วมกับการตรวจจับตัวแปรสภาพแวดล้อม”ตัวแปรสภาพแวดล้อมจะถูกรวบรวมก่อนเสมอ รายการที่กำหนดในไฟล์จะถูกเพิ่มต่อท้าย ดังนั้นรายการในไฟล์จึงสามารถครอบคลุมข้อมูลลับที่ไม่ได้อยู่ในตัวแปรสภาพแวดล้อม (ไฟล์คอนฟิก, ค่าที่ฝังในโค้ด, ฯลฯ) หากค่าเดียวกันปรากฏในทั้งสองแหล่ง โหมดของรายการในไฟล์จะมีความสำคัญกว่า
ไฟล์หลัก
หัวข้อที่มีชื่อว่า “ไฟล์หลัก”src/secrets/index.ts— การโหลด, การรวม, การรวบรวมตัวแปรสภาพแวดล้อมsrc/secrets/obfuscator.ts— คลาสSecretObfuscator, การสร้างตัวแทน, การปกปิดข้อความsrc/secrets/regex.ts— การวิเคราะห์และคอมไพล์ regex literalsrc/config/settings-schema.ts— คำนิยามการตั้งค่าsecrets.enabled