# แคตตาล็อก: ความรู้เฉพาะทางด้านความปลอดภัยที่โหลดเฉพาะเมื่อจำเป็น

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

Canonical: https://lagune.ai/th-TH/docs/catalog
ภาษา: th-TH
ต้นฉบับ: https://lagune.ai/docs/catalog
อัปเดตล่าสุด: 2026-11-07

🧠 ความรู้เฉพาะทางของ **Lagune** คือโมดูลความรู้ด้านความปลอดภัยที่เจาะจงเป็นเรื่อง ๆ และไม่ผูกกับภาษาโปรแกรมใด โหลดเฉพาะเมื่อจำเป็นและไม่เคยโหลดเป็นค่าเริ่มต้น ความรู้เฉพาะทางไม่ใช่คำสั่ง แคตตาล็อกของโปรเจกต์คือชุดความรู้เฉพาะทางที่โปรเจกต์ใช้: ความรู้เฉพาะทางในตัวของ [หมวดหมู่](https://lagune.ai/th-TH/docs/categories) ของโปรเจกต์ รวมกับความรู้เฉพาะทางของโปรเจกต์เอง เฟส detect และ verify หยิบมาใช้ระหว่างที่รัน และคุณโหลดตัวใดก็ได้โดยตรงทุกเมื่อ

**ภาพรวม**

*ภาพรวมแคตตาล็อกแบบโต้ตอบได้อยู่ในหน้าเว็บ ความรู้เฉพาะทางในตัวทั้งหมดอยู่ในตารางด้านล่าง*

**หลักการทำงาน**

## ใช้งานด้วยตัวเอง

หากต้องการใช้ความรู้เฉพาะทางโดยตรง ให้สั่งเอเจนต์โหลดด้วย `read catalog <name>` และเขียนงานที่ต้องการไว้ใน prompt เดียวกัน ความรู้นั้นจะทำงานกับสิ่งที่คุณขอ วิธีนี้ใช้ได้กับทุก prompt แม้แต่ prompt ที่ไม่เกี่ยวกับขั้นตอนของ **Lagune**

ตัวอย่างเช่น prompt อิสระที่สั่งตรง ๆ ให้สร้างชุด **RegExp** ที่ปลอดภัยด้วย **Python**:

```prompt
โหลดความรู้เฉพาะทาง regex ด้วย `npx lagune read catalog regex` แล้วสร้างชุด regular expression ใน @src/utils/regex.py สำหรับตรวจสอบอีเมลและชื่อผู้ใช้
```

prompt นี้ใช้ hook แบบ deterministic ทดสอบ **RegExp** แต่ละตัวว่าเสี่ยงต่อ **ReDoS** หรือไม่ เก็บเฉพาะตัวที่ปลอดภัย และได้ผลลัพธ์ประมาณนี้:

```python
import re

EMAIL = re.compile(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
USERNAME = re.compile(r"^[a-zA-Z0-9_]{3,20}$")

def is_email(value: str) -> bool:
    return EMAIL.match(value) is not None

def is_username(value: str) -> bool:
    return USERNAME.match(value) is not None
```

**ลองใช้ตัวตรวจ ReDoS**

ทดสอบรูปแบบด้วยตัวเองได้ที่ [**devina.io/redos-checker**](https://devina.io/redos-checker)

## ความรู้เฉพาะทางในตัว

ความรู้เฉพาะทางในตัวจัดกลุ่มเป็น [**หมวดหมู่**](https://lagune.ai/th-TH/docs/categories) และนี่คือชุดที่มาพร้อมกับ **Lagune**:

| ความรู้เฉพาะทาง       | หมวดหมู่                    | จุดเน้น                                                                                              |
| --------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------- |
| `regex`               | `owasp`                     | **ReDoS:** รูปแบบที่ทำงานช้าแบบทวีคูณเมื่อเจออินพุตที่จงใจสร้างขึ้น                                  |
| `network`             | `owasp`                     | **SSRF และ redirect:** ปลายทางของการ fetch หรือ redirect ที่ผู้ใช้กำหนด                              |
| `interpreter`         | `owasp`, `lovable`          | **Code injection:** `eval`, include แบบไดนามิก และการเรียกฟังก์ชันตามชื่อ                            |
| `sql`                 | `owasp`                     | **ฐานข้อมูลเชิงสัมพันธ์:** injection การเรียก ORM แบบ raw สิทธิ์ และสิ่งที่เอนจินฐานข้อมูลเข้าถึงได้ |
| `path`                | `owasp`                     | **path ในระบบไฟล์:** traversal, null-byte, NTFS stream และการฝังไฟล์                                 |
| `upload`              | `owasp`                     | **การอัปโหลดไฟล์:** ชนิดและ signature ของไฟล์ เนื้อหาอันตราย การจัดเก็บ และขีดจำกัด                  |
| `access-control`      | `owasp`, `lovable`          | **การยืนยันตัวตน การตรวจสอบสิทธิ์ และเซสชัน:** IDOR, mass assignment, tenant และเซสชัน               |
| `credential-endpoint` | `owasp`, `lovable`          | **การเดารหัสผ่านและบอต:** brute force, spraying, stuffing และ throttling                             |
| `federation`          | `owasp`                     | **ความน่าเชื่อถือของโทเค็น:** OAuth, OIDC, SAML, การตรวจสอบ JWT และการล็อกอินด้วย QR                 |
| `http-request`        | `owasp`                     | **ที่มาของ request:** CSRF, การตั้งค่า CORS ผิดพลาด และ IP ของไคลเอนต์ที่ถูกปลอม                     |
| `transport`           | `owasp`                     | **ความปลอดภัยของช่องทางสื่อสาร:** การตั้งค่า TLS การใช้ HTTPS แทนข้อความธรรมดา HSTS และ pinning      |
| `crypto`              | `owasp`, `lovable`          | **การเข้ารหัสข้อมูลที่จัดเก็บ:** อัลกอริทึมที่อ่อนหรือคิดขึ้นเอง CSPRNG และการจัดการคีย์             |
| `secrets`             | `owasp`, `lovable`          | **ข้อมูลรับรองที่ฮาร์ดโค้ด:** คีย์ โทเค็น และรหัสผ่านที่เขียนตรง ๆ ในซอร์สโค้ด                       |
| `api-endpoint`        | `owasp`                     | **พื้นผิวที่ไม่ใช่ REST:** GraphQL, gRPC, การตรวจสอบสิทธิ์ของ WebSocket, DoS และ schema              |
| `payment`             | `owasp`, `lovable`          | **ขั้นตอน checkout:** ตรวจสอบกับ gateway ฝั่งเซิร์ฟเวอร์ callback ที่มีลายเซ็น และ idempotency       |
| `xml`                 | `owasp`                     | **การ parse XML:** XXE, external entity และการขยายแบบ billion laughs                                 |
| `csv`                 | `owasp`                     | **Formula injection:** เซลล์ในสเปรดชีตที่ขึ้นต้นด้วย `=`/`+`/`-`/`@`                                 |
| `container`           | `owasp`, `infra`            | **การตั้งค่า container:** การรันเป็น root, capabilities, การ mount socket และ hardening ของ image    |
| `infra`               | `infra`                     | **Infrastructure as code:** Terraform, Dockerfile และ GitHub Actions                                 |
| `serverless`          | `owasp`, `infra`, `lovable` | **ฟังก์ชัน FaaS:** IAM แบบสิทธิ์น้อยที่สุด อินพุตจาก event บริบท และ secret                          |
| `llm`                 | `ai`, `lovable`             | **ความเสี่ยงของ AI และ LLM:** prompt injection, agency, RAG, MCP และเอาต์พุต                         |
| `supabase`            | `lovable`                   | **แบ็กเอนด์ Supabase:** RLS ที่ปิดไว้เป็นค่าเริ่มต้น policy ที่ AI สร้างผิด และโมเดลของคีย์          |
| `browser`             | `javascript`, `lovable`     | **ความเสี่ยงฝั่งไคลเอนต์:** XSS, CSP, framing, storage และอื่น ๆ                                     |
| `javascript`          | `javascript`                | **ความเสี่ยงระดับภาษา:** RCE, prototype pollution และอื่น ๆ                                          |
| `python`              | `python`                    | **ความเสี่ยงระดับภาษา:** RCE ผ่าน `pickle`, class pollution, `-O` และอื่น ๆ                          |
| `rust`                | `rust`                      | **ความถูกต้องของ `unsafe`:** UB ที่เกิดจากโค้ดเรียกแบบ safe, `transmute` และ overflow                |
| `java`                | `java`                      | **Deserialization และ mobile code:** chain ของ `readObject` และการยึดอ็อบเจกต์                       |
| `ruby`                | `ruby`                      | **Deserialization และ `open`:** การฟื้นอ็อบเจกต์ผ่าน `Marshal`/YAML และพฤติกรรมแปลกของ pipe          |
| `php`                 | `php`                       | **Type juggling และ `unserialize`:** magic hash และ POP chain                                        |
| `go`                  | `go`                        | **Typed-nil และ data races:** `nil != nil` และ goroutine ที่ใช้หน่วยความจำร่วมกัน                    |
| `c-cpp`               | `c-cpp`                     | **Format string:** `printf(user_input)` และการเขียนแบบ write-what-where ผ่าน `%n`                    |
| `dotnet`              | `dotnet`                    | **ความเสี่ยงระดับแพลตฟอร์ม:** RCE ผ่าน `BinaryFormatter`, `@Html.Raw` และช่องโหว่จาก enum            |

ความรู้ในตัวส่วนใหญ่กลั่นกรองมาจาก OWASP ดู [**แหล่งข้อมูล OWASP**](https://lagune.ai/th-TH/docs/references/owasp-sources) สำหรับการจับคู่ความรู้เฉพาะทางแต่ละตัวกับหน้าการโจมตีและ Cheat Sheet ต้นฉบับของ OWASP อย่างครบถ้วน มีโมดูลเฉพาะ stack ไม่กี่ตัวที่อิงแนวทางของผู้ให้บริการเองแทน เช่น `supabase` มาจากเอกสารของ Supabase และ CVE-2025-48757

## ความรู้เฉพาะทางของคุณเอง

ความรู้เฉพาะทางในตัวเพิ่มขึ้นด้วยไฟล์ความรู้ 1 ไฟล์และแถวในดัชนี 1 แถว ไม่เคยเพิ่มเป็นคำสั่งใหม่ คุณเพิ่มของคุณเองได้ด้วยวิธีเดียวกันผ่านคำสั่ง [`/lagune-specialize`](https://lagune.ai/th-TH/docs/commands/specialize): ชี้ไปที่บทความหรือหัวข้อ แล้วคำสั่งจะกลั่นกรองเป็นความรู้เฉพาะทางใหม่ลงในโปรเจกต์ของคุณ ได้แก่ไฟล์ใน `.lagune/catalog/` และรายการของไฟล์นั้นใน `.lagune/configs.json` ความรู้เฉพาะทางของคุณเองอยู่ในแคตตาล็อกเสมอไม่ว่าหมวดหมู่จะเป็นอะไร และหากตัวใดชื่อเดียวกับความรู้เฉพาะทางในตัว ตัวของคุณจะแทนที่ความรู้เฉพาะทางในตัวนั้น

**ภายใน Lagune โหลดความรู้เฉพาะทางให้อัตโนมัติเฉพาะเมื่อจำเป็น**

เมื่อเฟส detect หรือ verify เจอบริบทที่ความรู้เฉพาะทางตัวหนึ่งครอบคลุม เฟสนั้นจะโหลดความรู้เฉพาะทางตัวนั้นเองด้วย `read catalog <name>` ซึ่งเกิดขึ้นอัตโนมัติเป็นส่วนหนึ่งของเฟส คุณไม่ต้องทำเองเพื่อให้ทำงาน

## ดูว่ามีอะไรให้ใช้บ้าง

หากต้องการแสดงแคตตาล็อกของโปรเจกต์จากเทอร์มินัล โดยแสดงความรู้เฉพาะทางบรรทัดละตัวพร้อม tag:

```bash
npx lagune read catalog
# regex: Regular Expression [required]
# network: Requests, Webhook, URL Fetch, Socket, IMDS, Redirect
# interpreter: Evaluator, Sink, Shell, Dynamic Execution
# ...
```

ความรู้เฉพาะทางที่มี `[required]` ใช้เสมอไม่ว่างานจะเป็นอะไร ส่วนความรู้เฉพาะทางในตัวที่อยู่ในรายการขึ้นอยู่กับ [**หมวดหมู่**](https://lagune.ai/th-TH/docs/categories) ของโปรเจกต์

**ความรู้เฉพาะทางไม่ถูกโหลดเป็นค่าเริ่มต้น**

ความรู้ที่เกี่ยวข้องจะถูกดึงมาใช้ตามสิ่งที่โปรเจกต์เป็นจริง ๆ แทนที่จะรันการตรวจทุกอย่างเป็นค่าเริ่มต้น

## คำถามที่พบบ่อย

### ความรู้เฉพาะทางของ Lagune คืออะไร

โมดูลความรู้ด้านความปลอดภัยที่เจาะจงเป็นเรื่อง ๆ และไม่ผูกกับภาษาโปรแกรมใด โหลดเฉพาะเมื่อจำเป็นและไม่เคยโหลดเป็นค่าเริ่มต้น ความรู้เฉพาะทางไม่ใช่คำสั่งแบบ skill ของเอเจนต์

### แคตตาล็อกของโปรเจกต์คืออะไร

ชุดความรู้เฉพาะทางที่โปรเจกต์ใช้: ความรู้เฉพาะทางในตัวของหมวดหมู่ของโปรเจกต์ รวมกับความรู้เฉพาะทางของโปรเจกต์เอง ระหว่างที่ยังไม่มีหมวดหมู่ใดถูกบันทึก โปรเจกต์จะใช้ OWASP อย่างเดียว

### ความรู้เฉพาะทางถูกโหลดเป็นค่าเริ่มต้นไหม

ไม่ ความรู้เฉพาะทางโหลดเฉพาะเมื่อจำเป็น ตามสิ่งที่โปรเจกต์เป็นจริง ๆ

### โหลดความรู้เฉพาะทางโดยตรงได้อย่างไร

ใน prompt เดียวกับงานที่ต้องการ ให้สั่งเอเจนต์รัน npx lagune read catalog <name>
