# Hook network: ประเมินความเสี่ยง SSRF ของ URL

> ประเมินความเสี่ยง SSRF ของปลายทางการ fetch หนึ่งหรือหลายรายการได้จากบรรทัดคำสั่งโดยตรง

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

hook `network` ตัดสินว่าปลายทางที่เซิร์ฟเวอร์จะ fetch ปลอดภัยจาก **SSRF** หรือไม่ (request ที่อาจถูกเล็งไปยังบริการภายใน cloud metadata หรือโฮสต์ส่วนตัว) hook นี้คือเอนจินแบบ deterministic เบื้องหลัง [ความรู้เฉพาะทาง `network`](https://lagune.ai/th-TH/docs/catalog) และคุณรันเองได้

## การรัน

ส่งปลายทางแต่ละรายการด้วย `--url` แล้ว hook จะพิมพ์คำหนึ่งคำต่อปลายทางหนึ่งรายการ ซึ่งอ่านความหมายได้จากตารางด้านล่าง

**ปลายทางเดียว**

```bash
npx lagune read network --url 'http://example.com/'
# => safe

npx lagune read network --url 'http://0x7f000001/'
# => private-target
```

**หลายปลายทาง**

ใส่ `--url` ซ้ำเพื่อประเมินรายการที่อนุญาตหรือรายการที่บล็อกทั้งชุดในการเรียกครั้งเดียว โดยได้ผลตัดสินบรรทัดละหนึ่งรายการตามลำดับ

```bash
npx lagune read network \
  --url 'http://example.com/' \
  --url 'http://[::1]/' \
  --url 'http://allowed.com@evil.example/'
# => safe
# => private-target
# => parser-divergent
```

hook จะ resolve โฮสต์แบบเดียวกับที่เครือข่ายทำ รูปแบบที่เข้ารหัสของที่อยู่ภายในจึงหลุดรอดไปไม่ได้: เลขฐานสิบหก เลขฐานแปด เลขฐานสิบแบบไม่มีจุด รูปแบบย่อ IPv6 และ IPv4-mapped จะได้ผลเป็น `private-target` ทั้งหมด และในกรณีที่ validator ที่หละหลวมกับตัว fetch จริงอ่านได้เป็นคนละโฮสต์ ผลตัดสินจะเป็น `parser-divergent`

## วิธีอ่านผลตัดสิน

| ผลตัดสิน           | ความหมาย                                                                                      |
| ------------------ | --------------------------------------------------------------------------------------------- |
| `safe`             | ปลายทางเชื่อมต่อไปยังโฮสต์สาธารณะ และ validator ที่หละหลวมก็จะอ่านได้เป็นโฮสต์เดียวกัน        |
| `private-target`   | โฮสต์ resolve ไปเป็นที่อยู่แบบ private, loopback, link-local, unspecified หรือ cloud metadata |
| `parser-divergent` | validator ข้อความที่หละหลวมจะอ่านได้เป็นโฮสต์จริงคนละตัวกับโฮสต์ที่ตัว fetch เชื่อมต่อ        |
| `invalid url`      | สตริงนั้นแปลงเป็น URL ไม่ได้ จึงไม่มีอะไรให้ fetch                                            |

มีเพียง `safe` ที่หมายถึงอนุญาต ให้ถือว่า `private-target`, `parser-divergent` และ `invalid url` หมายถึงบล็อกทั้งหมด

### ตัวเลือก CLI

| ตัวเลือก | ค่า           | คำอธิบาย                                                                           |
| -------- | ------------- | ---------------------------------------------------------------------------------- |
| `--url`  | URL หรือโฮสต์ | ตรวจปลายทางหนึ่งรายการ ใส่ซ้ำเพื่อตรวจหลายรายการ โดยได้ผลตัดสินบรรทัดละหนึ่งรายการ |

ต้องมี `--url` อย่างน้อยหนึ่งรายการ เอนจินไม่รับปลายทางเป็นอาร์กิวเมนต์ตามตำแหน่งเปล่า ๆ จึงไม่มีทางสับสนปลายทางกับ flag

**ทำไมต้องเป็นค่าของ flag**

ปลายทางแต่ละรายการส่งเข้าไปเป็นค่าของ flag และไม่เคยนำไปแทรกลงในคำสั่งโดยตรง ค่าที่มีเครื่องหมายคำพูดหรือ backtick จึงไม่มีผลใด ๆ และ inject เข้า shell ไม่ได้ ครอบค่าด้วยเครื่องหมายคำพูดเดี่ยวเสมอ เพื่อไม่ให้ shell ของคุณขยายค่านั้นก่อน

**สิ่งที่ไม่ครอบคลุม**

hook นี้เป็นแบบ pure และไม่เคย resolve DNS ช่องว่างสองอย่างที่เกิดตอน runtime จึงอยู่นอกขอบเขต: **DNS rebinding** (ชื่อที่ resolve เป็นที่อยู่สาธารณะตอนตรวจ แต่เป็นที่อยู่ภายในตอน fetch) และ **redirect chain** (hop แรกผ่านการตรวจ แล้ว redirect เข้าสู่ภายใน) ปิดช่องว่างเหล่านี้ด้วยการ resolve เพียงครั้งเดียวแล้วเชื่อมต่อไปยังที่อยู่ที่ตรวจแล้ว และด้วยการปฏิเสธ redirect hook นี้กำหนดให้ชื่อ loopback ที่สงวนไว้ (`localhost` และกลุ่ม `.localhost`) เป็นที่อยู่ภายในโดยไม่ต้อง lookup แต่ชื่อ DNS อื่นทั้งหมดจะได้ผลเป็น `safe` เพราะการยืนยันว่าชื่อนั้น resolve เข้าสู่ภายในต้องอาศัยการ resolve จริง: รายการที่อนุญาตเป็นตัวป้องกันชื่อเหล่านั้น และเป็นสิ่งที่ checker นี้ตรวจสอบ

**เคล็ดลับ**

นี่คือการตรวจแบบเดียวกับที่ [ความรู้เฉพาะทาง `network`](https://lagune.ai/th-TH/docs/catalog) ใช้พิสูจน์ว่าตัวกรองปลายทางยังได้ผล

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

### ทดสอบ URL ว่ามีช่องโหว่ SSRF ได้อย่างไร

รัน hook network ซึ่งจะประเมินปลายทางการ fetch และคืนค่าเป็น safe, private-target, parser-divergent หรือ invalid url มีเพียง safe ที่หมายถึงอนุญาต

### URL แบบ parser-divergent คืออะไร

URL ที่ parser แต่ละตัวอ่านได้ต่างกัน ซึ่งเป็นวิธีเลี่ยงการป้องกัน SSRF แบบคลาสสิก hook network ชี้ว่า URL แบบนี้เป็นปัญหาแทนที่จะอนุญาต
