
ที่มาภาพ: Unknown Source
วิธีตั้งค่า Pre‑commit Hook เพื่อตรวจจับ Secrets ด้วย TruffleHog
⚡ สรุป 30 วิ
การจัดเก็บรหัสบนระบบควบคุมเวอร์ชันโดยไม่ระวังอาจทำให้ **ข้อมูลลับ (Secrets) ปรากฏใน repository ได้ การตรวจจับ Secrets ตั้งแต่ขั้นตอน commit จะช่วยลดความเสี่ยงอย่างมาก ในบทความนี้เราจะสอนวิธีตั้งค่า *P…
บทนำ
การจัดเก็บรหัสบนระบบควบคุมเวอร์ชันโดยไม่ระวังอาจทำให้ **ข้อมูลลับ (Secrets) ปรากฏใน repository ได้ การตรวจจับ Secrets ตั้งแต่ขั้นตอน commit จะช่วยลดความเสี่ยงอย่างมาก ในบทความนี้เราจะสอนวิธีตั้งค่า *Pre‑commit Hook* เพื่อสแกนหา Secrets ด้วยเครื่องมือ TruffleHog อย่างละเอียดและง่ายต่อการทำตาม
ทำความเข้าใจ Pre‑commit Hook — Pre‑commit Overview
Pre‑commit Hook คือสคริปต์ที่รันอัตโนมัติก่อนที่ Git จะยอมรับการ commit เข้ามาใน local repository ช่วยให้ทีมพัฒนา บังคับกฎ ต่าง ๆ เช่น รูปแบบโค้ด การตรวจสอบความปลอดภัย หรือการลบข้อมูลลับออกก่อนส่งไปยัง remote
- ทำงานภายในเครื่องของผู้ใช้แต่ละคน
- สามารถกำหนดหลาย Hook ได้พร้อมกัน
- หาก Hook ล้มเหลว commit จะถูกยกเลิกทันที
ทำไมต้องตรวจจับ Secrets — Why Scan Secrets
Secrets ที่รั่วไหลอาจเป็นคีย์ API, รหัสผ่าน, หรือ token ต่าง ๆ ซึ่งผู้โจมตีสามารถใช้เพื่อเข้าถึงระบบสำคัญได้ การสแกนก่อน commit ช่วยให้พบและจัดการปัญหาในช่วงต้นของวงจรพัฒนา
- ลดโอกาสข้อมูลลับเข้าสู่ public repository
- ป้องกันความเสียหายจากการใช้งาน API key ที่ถูกขโมย
- ส่งเสริมวัฒนธรรม “security‑first” ในทีม
แนะนำ TruffleHog — TruffleHog Introduction
TruffleHog เป็นเครื่องมือโอเพ่นซอร์สที่ค้นหา Secrets โดยใช้เทคนิคการตรวจจับ entropy สูง และ regex pattern ที่รู้จักกันดี มันสามารถสแกนทั้งประวัติ Git (git history) และไฟล์ใหม่ ๆ อย่างรวดเร็ว
- รองรับ Python 3.x, มี CLI ง่ายต่อการใช้งาน
- ตรวจสอบหลายรูปแบบ เช่น AWS keys, Slack tokens, JWT ฯลฯ
- ให้ผลลัพธ์เป็น JSON ที่อ่านง่ายสำหรับการประมวลผลต่อไป
ติดตั้ง TruffleHog ในโครงการ — Installation Steps
- **ขั้นที่ 1: เตรียมสภาพแวดล้อม Python
```bash python3 -m venv .venv source .venv/bin/activate ```
- **ขั้นที่ 2: ติดตั้ง TruffleHog ผ่าน pip
```bash pip install trufflehog ```
- **ขั้นที่ 3: ยืนยันการติดตั้งโดยรันคำสั่งทดสอบ
```bash trufflehog --version ```
สร้างไฟล์กำหนดค่า Pre‑commit — .pre-commit-config.yaml**
สร้างไฟล์ `.pre-commit-config.yaml` ที่ root ของ repository แล้วใส่การตั้งค่าดังนี้
```yaml repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0 hooks:
- id: trailing-whitespace
- repo: local
hooks:
- id: trufflehog
name: Scan Secrets with TruffleHog entry: trufflehog git . --json language: system types: [text] ```
- ส่วนแรกของไฟล์เป็น Hook พื้นฐานจาก `pre‑commit-hooks` เช่น ตรวจสอบ whitespace
- ส่วนที่สองกำหนด Hook ของ TruffleHog ให้สแกน repository ปัจจุบัน (`git .`) แล้วส่งผลลัพธ์ในรูปแบบ JSON
ติดตั้งและเปิดใช้งาน Pre‑commit — Enable Hook
- **ขั้นที่ 1: เริ่มต้น pre‑commit ในโครงการ
```bash pre-commit install ```
- **ขั้นที่ 2: รัน Hook ทั้งหมดเพื่อทดสอบครั้งแรก
```bash pre-commit run --all-files ```
Tip: หากพบผลลัพธ์เป็น false positive ให้เพิ่ม pattern ที่ไม่ต้องการสแกนในไฟล์ `trufflehog.yaml` หรือใช้ flag `--exclude-paths` เพื่อยกเว้นโฟลเดอร์ที่ไม่มีความสำคัญ
ทดสอบการทำงานของ Hook — Verification
สร้างไฟล์ทดลองที่ใส่ค่า API key ปลอมแล้วพยายาม commit
```bash echo "aws_secret_access_key = ABCDEFGHIJKLMNOPQRSTUVWXYZ123456" > secret.txt git add secret.txt git commit -m "Add test secret" ```
ถ้า Hook ทำงานสำเร็จ จะเห็นข้อความบ่งชี้ว่า Secrets ถูกตรวจจับ และการ commit จะถูกยกเลิก ผู้ใช้ต้องลบหรือซ่อนข้อมูลก่อนทำการ commit ใหม่
เปรียบเทียบ TruffleHog กับเครื่องมือสแกน Secrets อื่น ๆ — Comparison Table
| คุณสมบัติ | TruffleHog | GitGuardian | detect-secrets |
|---|---|---|---|
| วิธีตรวจจับ | Entropy + Regex | API cloud scanning | Heuristics + Regex |
| รองรับภาษา | Python (CLI) | SaaS + CLI | Python |
| ราคาการใช้งาน | ฟรี (โอเพ่นซอร์ส) | มีแผนฟรี/พรีเมี่ยม | ฟรี |
| การตรวจสอบประวัติ Git | ไม่ (ต้องเชื่อมต่อ repo) | ไม่ | |
| ความแม่นยำ | สูง (อาจมี false positive) | สูง (AI‑assisted) | ปานกลาง |
จากตารางจะเห็นว่า TruffleHog เหมาะกับการใช้งานแบบออฟไลน์และต้องการสแกนประวัติทั้งหมด ในขณะที่ GitGuardian ให้ความสะดวกผ่าน SaaS แต่มีค่าใช้จ่าย
เคล็ดลับเพิ่มประสิทธิภาพ — Best Practices
- ตั้งค่า `exclude` เพื่อไม่ให้สแกนไฟล์ config หรือ documentation ที่อาจมีตัวอย่างคีย์เท็จ
- รัน Hook บน CI/CD pipeline ด้วยคำสั่ง `pre-commit run --all-files` เพื่อให้แน่ใจว่าโค้ดที่ merge ผ่านการตรวจสอบแล้วทุกครั้ง
- เก็บผลลัพธ์ JSON ของ TruffleHog ไว้ในระบบบันทึก (log) เพื่อตรวจสอบแนวโน้มของ Secrets ที่พบบ่อย
Warning: อย่าให้ไฟล์ `.pre-commit-config.yaml` หรือ `trufflehog.yaml` อยู่ในที่สาธารณะโดยไม่มีการเข้ารหัส หากมีข้อมูลลับในไฟล์กำหนดค่าเอง ควรเก็บไว้ใน secret manager ขององค์กร
สรุป — Summary
เราได้เรียนรู้วิธีตั้งค่า Pre‑commit Hook เพื่อสแกนหา Secrets ด้วย TruffleHog ตั้งแต่การติดตั้งเครื่องมือ การสร้างไฟล์กำหนดค่า การเปิดใช้งาน Hook ไปจนถึงการทดสอบและเคล็ดลับในการทำให้ระบบปลอดภัยยิ่งขึ้น
- Pre‑commit Hook ช่วยบังคับกฎความปลอดภัยก่อน commit
- TruffleHog ตรวจจับ Secrets ด้วย entropy และ regex อย่างแม่นยำ
- ตั้งค่า `.pre-commit-config.yaml` ให้รวม Hook ของ TruffleHog ลงใน workflow
- ทดสอบด้วยไฟล์ตัวอย่างและตรวจสอบผลลัพธ์บน CI/CD
การนำวิธีนี้ไปใช้จริงจะทำให้ทีมพัฒนาป้องกันข้อมูลลับรั่วไหลตั้งแต่ขั้นตอนแรกของวงจรการเขียนโค้ด ลดความเสี่ยงและสร้างวัฒนธรรมการพัฒนาแบบ Secure‑by‑Design อย่างยั่งยืน.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่า Pre‑commit Hook เพื่อตรวจจับ Secrets ด้วย TruffleHog
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 16 กรกฎาคม 2569 เวลา 17:51



