#Audit

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

ย้ายเว็บ .aspx เก่าทั้งเว็บ ทำเป็น catalog JSON แล้วคัดรูปขยะออกเอง
เจ้าของเว็บ .aspx เก่าขอให้ทำเว็บใหม่ แต่เนื้อหาสิบกว่าปีอยู่ในฐานข้อมูลที่เข้าไม่ถึงแล้ว ผมเลยไล่เก็บหน้าเว็บของเขาเองมาทำเป็น catalog JSON ที่คง legacy_id ไว้ทั้งหมด แล้วเขียนตัวคัดรูปสามชั้นกันไม่ให้ QR ของแถมกลายเป็นรูปปกบทความ

ตารางเกณฑ์ในสเปรดชีตที่ไม่ได้ผูกสูตร ถอดค่าคงที่กลับเป็นสูตร
ชีตที่มีตารางเกณฑ์วางอยู่ข้าง ๆ แต่ไม่ได้ผูก VLOOKUP คนอ่านตารางแล้วพิมพ์ค่าลงช่องเอง พลาดเมื่อไรไม่มีใครรู้ บทความนี้ว่าด้วยการแยกช่องสูตรกับช่องพิมพ์มือออกจากกัน แล้วถอดคอลัมน์ตัวคูณ 16 ค่ากลับมาเป็นสูตรเดียวที่ตรงทั้งตาราง

หน้าเว็บว่างเปล่า ไม่มี error สักบรรทัด เพราะตั้งชื่อฟังก์ชันว่า top
deploy ขึ้นไปแล้วหน้าว่าง ไม่มี error ในล็อก ไม่มีอะไรผิดใน node --check แต่เบราว์เซอร์ฆ่าทั้งสคริปต์ตั้งแต่บรรทัดแรกเพราะมีฟังก์ชันชื่อ top ไปชนกับ window.top พร้อมรายชื่อที่ต้องเลี่ยง กับดักลำดับการโหลดสคริปต์ และด่านตรวจด้วย Playwright ที่ควรมีทุกโปรเจกต์

ลบใบหน้าในเครื่องสแกนไม่ได้ เพราะ API ตอบ notSupport
เครื่องสแกนใบหน้าที่ประตูโฆษณาว่ามีคำสั่งลบใบหน้าใน FDLib แต่ยิงคำสั่งจริงกลับตอบ notSupport ทุกรูปแบบ คนที่ออกไปแล้วเลยยังสแกนเข้าได้อยู่ บทความนี้เล่าทางที่ตัน ทางที่ใช้ได้จริงคือ UserInfo/Modify แบบ body สั้นที่สุด และวงจร sync ทะเบียนคนสองทางที่รันทุกคืน

เขียนค่าลง DirectAdmin ตอนที่ API มีแต่ฝั่งอ่าน ต้องขับฟอร์มของแผงเอง
บันทึกการทำให้แอปหลังบ้านสร้างและแก้แพ็กเกจโฮสติ้งบน DirectAdmin ได้ ทั้งที่ CMD_API ตัวทางการมีแต่คำสั่งอ่าน ต้อง POST เข้าฟอร์มของแผงควบคุมเอง พร้อมกฎการยืนยันผลที่ห้ามใช้ regex และสวิตช์ตัดวงจรสองชั้นที่ปิดไว้เป็นค่าตั้งต้น

nameserver ที่ registrar ไม่ตรงกับระบบบิลลิ่ง ออดิตสามฝั่งก่อนแก้
บันทึกการไล่บั๊ก "Wrong response from the server" ตอนกดเปลี่ยน nameserver ในระบบบิลลิ่ง ที่พังเฉพาะโดเมนที่มีข้อมูล glue IP ตกค้าง แล้วทำออดิตเทียบสามฝั่งระหว่าง registrar ระบบบิลลิ่ง และโซน DNS จริง ก่อนจะกล้าแก้อะไรสักตัว

ให้ AI อ่านเอกสาร แต่ให้โค้ดเป็นคนคิดเลข
controller บังคับให้คนกรอกอยู่ในช่วง 0 ถึง 100 แต่เส้นทางที่ AI อ่านค่าจากเอกสารแล้วป้อนเข้ามาตรวจแค่ว่าเป็นตัวเลข ค่าติดลบตัวเดียวดันผลลัพธ์ขึ้นไป 5.25 เท่าโดยไม่มี error — บทเรียนเรื่องการมองเอาต์พุตของ AI เป็น input ที่ไม่น่าเชื่อถือเท่ากับที่คนกรอก

ไฟล์ลับคุม 600 ครบ แต่ log 0644 ถูกอัปออกนอกเครื่องทุกคืน
เข้ารหัส .env เรียบร้อย คุมสิทธิ์ไฟล์ลับครบทุกตัว แต่ข้อมูลลูกค้ายังรั่วออกนอกเครื่องทุกคืนผ่านทางที่ไม่มีใครจัดว่าเป็นความลับ นั่นคือไฟล์ log ที่อ่านได้ทั้งเครื่องและถูกมัดรวมขึ้น object storage พร้อม backup พร้อมวิธีปิดที่ต้นทางด้วยการ log แค่รหัสผลลัพธ์

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

ใช้ NVR เป็นประตูเข้าหากล้องที่ยิงตรงไม่ถึง ด้วย ISAPI และ SDK
กล้องอยู่หลังขาที่สองของ NVR ยิงตรงไม่ถึงเลยสักตัว บทความนี้ไล่ว่า ISAPI ของ NVR ทำอะไรได้จริงบ้าง ใช้ได้ 26 จาก 38 endpoint ที่ลอง ดึงภาพนิ่งกับ RTSP ของกล้องวงปิดผ่าน NVR ค้นว่าช่องไหนบันทึกล่าสุดเมื่อไหร่ และตอนที่ ISAPI จนแต้มก็ลงไปเรียก HCNetSDK ผ่าน ctypes เพื่ออ่าน log ของเครื่อง

audit ระบบ prod ที่มีข้อมูลลูกค้าจริง โดยไม่ทิ้งขยะสักแถว
เจ้าของระบบสั่งให้ทดสอบทั้งระบบบนเครื่องจริงที่มีข้อมูลลูกค้าอยู่ แล้วห้ามเหลือแถวขยะไว้แม้แถวเดียว วิธีที่ผมใช้คือ bootstrap Laravel เองแล้วเรียก controller ตรง ๆ ใน transaction ที่ rollback ทิ้ง พร้อมนับ COUNT ทุกตารางก่อนและหลังเป็นหลักฐาน

ออดิตกล้อง CCTV ในวงเองด้วย ISAPI กับ ffprobe RTSP ไม่ผ่าน NVR
หน้าจอ NVR บอกแค่ว่ากล้องออนไลน์ ไม่ได้บอกว่ารุ่นอะไร firmware ค้างปีไหน หรือสตรีมจริงเป็นความละเอียดเท่าไหร่ บทความนี้เขียนสคริปต์ยิง ISAPI deviceInfo ตรงเข้ากล้องทีละตัว แล้วใช้ ffprobe ดึงค่าจากสตรีม RTSP จริง เพื่อทำ inventory กับ health check ระบบกล้องที่เราดูแลอยู่

สำรวจสวิตช์และ AP ด้วย SNMP walk ดึงตาราง MAC ต่อพอร์ตมาทำ inventory
ไม่มี controller ไม่มี NMS ก็ทำ inventory ชั้น 2 เองได้ เขียน SNMP walk ด้วย pysnmp asyncio ดึง sysDescr, ifTable และตาราง bridge FDB แล้วแปลง OID index กลับเป็น MAC เพื่อรู้ว่าอุปกรณ์ตัวไหนเสียบพอร์ตไหนของสวิตช์ตัวไหน

แคปหน้าจอเว็บทีละหลายโดเมน + บังคับให้ชนเซิร์ฟเวอร์ต้นทาง ข้าม Cloudflare
ต้องแคปหน้าจอเว็บทีละหลายสิบโดเมนเพื่อตรวจ หรืออยากยืนยันว่าเซิร์ฟเวอร์ต้นทาง (ไม่ใช่ CDN cache) render ถูก — แต่ flag screenshot ของ Chrome พังตั้งแต่รุ่น 132 และแก้ hosts ก็โดน AV คืนค่า บทความนี้ใช้ Playwright override DNS ระดับโปรเซส จบทั้งสองปัญหา

nginx โดน heap overflow ย้อนหลัง 15 ปี — แต่เช็คแค่เวอร์ชันไม่พอ
CVE-2026-42533 กินเวอร์ชัน nginx ตั้งแต่ 0.9.6 ถึง 1.31.2 คือย้อนหลัง 15 ปี แต่จะโดนจริงหรือไม่อยู่ที่ config ไม่ใช่เวอร์ชัน ปัญหาคือเงื่อนไขที่ข่าวสรุปกันแคบกว่าของจริง เช็คตามข่าวแล้วจะได้ผลว่า "ปลอดภัย" ทั้งที่ยังเข้าเงื่อนไขอยู่

audit ความปลอดภัยเซิร์ฟเวอร์ Debian shared-host แบบ read-only — เริ่มยังไงไม่ให้แบนตัวเอง
ตรวจความปลอดภัยเซิร์ฟเวอร์ Debian ที่รัน DirectAdmin แบบ read-only ก่อน — แต่กับดักแรกคือทราฟฟิกจากการ scan เองเข้าเงื่อนไข brute-force ของ CSF จนแบน IP ตัวเอง บทความนี้วางลำดับ audit ที่ปลอดภัย + จุดที่ต้องดูในยุค 2024-2026