← กลับไปหน้าบทความ
ตรวจสอบคุณภาพแคมเปญ

มี Event ปลอมยิงเข้า GA4 เพราะข้อมูลลับหลุด ตรวจและปิดช่องยังไง

ทีมบรรณาธิการ linli01 พ.ย. 09:28อัปเดต 01 พ.ย. 09:28อ่าน 3 นาที
มี Event ปลอมยิงเข้า GA4 เพราะข้อมูลลับหลุด ตรวจและปิดช่องยังไง
บทความนี้จัดทำเพื่อความรู้ ชื่อธุรกิจ ตัวเลข หรือบทสนทนาที่ไม่มีแหล่งอ้างอิงกำกับเป็นกรณีตัวอย่างเพื่ออธิบายแนวคิด ดูรายละเอียดที่ นโยบายกองบรรณาธิการ

สรุปสั้น ๆ

Measurement Protocol รับ event จากใครก็ได้ที่ถือ Measurement ID คู่กับ API secret ถ้า secret หลุดจากโค้ดหน้าเว็บ ที่เก็บโค้ดสาธารณะ หรือไฟล์ที่ส่งต่อกันในทีม คนนอกจะยิง event อะไรเข้าพร็อพเพอร์ตี้ก็ได้ วิธีปิดช่องคือเพิกถอน secret เดิมแล้วสร้างอันใหม่ไว้ฝั่งเซิร์ฟเวอร์เท่านั้น จากนั้นใส่พารามิเตอร์ประจำตัวใน event ของจริงเพื่อแยกออกจาก event ขยะ

ลองนึกภาพว่าผู้จัดการแบรนด์เครื่องสำอางส่งภาพหน้าจอเข้ากลุ่ม LINE ตอนเช้า line_click เมื่อวาน 4,000 ครั้ง ทั้งที่ปกติวันละราว 300 ‘แอดเราพีคหรือเปล่าคะ’ มีเดียบายเออร์เปิด Ads Manager ดู คลิกลิงก์เมื่อวานไม่ได้เพิ่ม ยอดแชทใน LINE OA ก็เท่าเดิม มีแต่ตัวเลขใน GA4 ที่พุ่งขึ้นเดี่ยว ๆ

ถ้าตัวเลขพุ่งโดยที่ฝั่งแชทไม่ขยับ ผมไม่เริ่มจากสงสัยแคมเปญ แต่สงสัยก่อนว่ามีใครส่ง event เข้ามาโดยไม่ผ่านหน้าเว็บ ช่องทางที่ทำแบบนั้นได้ง่ายที่สุดคือ Measurement Protocol ซึ่งออกแบบให้เซิร์ฟเวอร์ส่งข้อมูลเข้า GA4 ได้โดยไม่ต้องมีเบราว์เซอร์ และมันไม่ถามว่าคนส่งคือใคร ถามแค่ว่ามี secret หรือเปล่า

ที่ร้ายกว่ารายงานเพี้ยนคือกรณีที่ key event จาก GA4 ถูกนำเข้า Google Ads เป็น conversion เพราะตัวเลขปลอมจะไหลไปสอนระบบ bidding ด้วย

Measurement Protocol รับคำสั่งแบบไหน และอะไรกั้นคนนอก

การเรียก Measurement Protocol คือการ POST ไปที่ endpoint ของ Google พร้อม query สองตัว คือ measurement_id และ api_secret ส่วน body เป็น JSON ที่มี client_id กับรายการ events ตัวอย่างเช่น event ชื่อ line_click หนึ่งรายการ แล้ว GA4 จะบันทึกลงพร็อพเพอร์ตี้ที่ตรงกับ ID

Measurement ID (ขึ้นต้นด้วย G-) อยู่ในโค้ดหน้าเว็บของทุกเว็บอยู่แล้ว ใครกด View Source ก็เห็น จึงไม่ใช่ความลับ สิ่งเดียวที่กั้นคนนอกออกจาก Measurement Protocol คือ API secret และ GA4 ไม่ได้ตรวจว่า event นั้นมาจากเว็บของคุณจริงหรือไม่ ใครถือ secret ก็ยิงได้เท่ากับทีมคุณ

secret หลุดออกไปทางไหนได้บ้าง

  • ฝังอยู่ใน JavaScript ของหน้าเว็บ เพราะนักพัฒนาอยากยิง Measurement Protocol จากเบราว์เซอร์ให้ง่าย ซึ่งเท่ากับแปะรหัสผ่านไว้ให้ทุกคนอ่าน
  • อยู่ในที่เก็บโค้ดที่เปิดเป็นสาธารณะ หรือไฟล์ .env ที่ถูก commit ขึ้นไปโดยไม่ตั้งใจ
  • เก็บเป็นตัวแปร Constant ใน GTM web container ซึ่งโค้ดของ container ถูกส่งไปที่เบราว์เซอร์ทุกคน ใครเปิดไฟล์ gtm.js ก็เห็นค่านั้น
  • ส่งต่อกันในสไลด์ Google Sheets หรือแชทกลุ่มระหว่างทีมกับ freelancer และ agency เก่า แล้วไม่เคยถูกเปลี่ยนหลังคนออก
  • ใช้ secret ตัวเดียวกันข้ามหลายลูกค้าในฝั่ง agency พอโปรเจกต์หนึ่งหลุด ทุกพร็อพเพอร์ตี้ที่ใช้ secret นั้นเสี่ยงตามไปด้วย

อาการที่บอกว่า event ไม่ได้มาจากลูกค้าจริง

ไม่มีอาการใดอาการเดียวที่ฟันธงได้ ผมดูหลายอย่างพร้อมกันแล้วเทียบกับฝั่ง LINE OA ซึ่งเป็นแหล่งที่คนนอกยิงปลอมไม่ได้

อาการใน GA4ทำไมน่าสงสัยตรวจที่ไหน
ชื่อ event แปลกหรือสะกดต่างจากที่ทีมตกลงไว้ของจริงถูกสร้างจากรายชื่อ event ที่ทีมกำหนดรายงาน Events เรียงตามจำนวน
มี event แต่ไม่มี page_view หรือ session_start ตามมาevent ที่ยิงตรงเข้า Measurement Protocol ไม่ผ่านหน้าเว็บExplorations นับ event ต่อเซสชัน
page_location หรือชื่อโฮสต์เป็น (not set)event จากเว็บจะมีที่อยู่หน้าเสมอ เว้นแต่ทีมส่งมาเองจากเซิร์ฟเวอร์โดยไม่ใส่Explorations ที่แยกด้วย Hostname
key event พุ่ง แต่แชทใหม่ใน LINE OA ไม่ขยับลูกค้าจริงที่กดปุ่ม LINE ต้องทิ้งแชทไว้อย่างน้อยบางส่วนเทียบรายวันกับจำนวนแชทใหม่
รายชื่อ API secret มีชื่อที่ไม่มีใครจำได้ทุก secret ควรมีเจ้าของและเหตุผลที่สร้างAdmin > Data streams > Measurement Protocol API secrets

ปิดช่องภายในวันเดียว ตามลำดับนี้

  1. สร้าง secret ใหม่ที่ Admin > Data streams > เลือก stream > Measurement Protocol API secrets แล้วเก็บไว้ในที่ลับของเซิร์ฟเวอร์ เช่น secret manager หรือ environment variable ไม่ใช่ใน GTM web
  2. ย้ายทุกระบบที่ส่งข้อมูลของจริงไปใช้ secret ใหม่ ถ้ามีหลายตัว เช่น webhook ที่ส่งยอดขายและงานที่ส่งลีดจาก LINE ให้ไล่จากรายการที่ทีมจดไว้ การหมุนรหัสแบบเป็นระบบเขียนไว้ใน บทความเรื่องการเปลี่ยน credential ของ agency
  3. ลบ secret เก่าทิ้ง การลบคือจุดที่ปิดประตู ถ้าสร้างใหม่แต่ลืมลบอันเก่า คนนอกยังใช้ต่อได้
  4. จดช่วงเวลาที่ข้อมูลเปื้อนไว้ในที่ที่ทุกคนเห็น เพื่อไม่ให้ใครดึงช่วงนั้นไปทำรายงานโดยไม่รู้
  5. เช็คว่า key event ที่เปื้อนถูกนำเข้า Google Ads เป็น conversion หรือไม่ ถ้าใช่ ให้ลดเป็น secondary ชั่วคราวจนกว่าจะแน่ใจ ดู บทความเรื่อง secondary conversion
  6. ใส่พารามิเตอร์ประจำตัวใน event ของจริงทุกตัว ดูหัวข้อถัดไป

ทำให้ event ของจริงพิสูจน์ตัวเองได้

ข้อมูลที่เก็บไปแล้วลบทีละ event ไม่ได้ ตัวเลือกที่ GA4 มีคือคำขอลบข้อมูลใน Admin ซึ่งจำกัดและย้อนกลับไม่ได้ ผมจึงไม่ใช้เป็นทางแรก ทางที่ใช้ได้เสมอคือทำให้ของจริงมีลายเซ็น เพิ่มพารามิเตอร์หนึ่งตัวใน event ที่ทีมส่งเอง เช่น src=srv พร้อมรหัสลิงก์ภายในที่คนนอกเดาไม่ได้ แล้วลงทะเบียนเป็น custom dimension ระดับ event เพื่อให้เลือกใช้ในรายงานปกติ

จากนั้นรายงานทุกหน้าที่ใช้ตัดสินงบให้กรองเฉพาะ event ที่มีลายเซ็น ส่วน event ที่ไม่มีลายเซ็นเก็บไว้เป็นกองสำหรับตรวจ ถ้ากองนั้นโตผิดปกติ ก็รู้ทันทีว่ามีคนยิงอีก วิธีนี้ครอบคลุมกรณีที่คนนอกยิงเข้าเว็บสตรีมด้วย Measurement ID อย่างเดียวโดยไม่ต้องใช้ secret ซึ่งป้องกันที่ชั้นรับข้อมูลได้ยาก ดู schema ของ event ได้ที่ บทความตรวจ schema ของ GA4 event

ตารางตรวจเดือนละครั้ง ใช้เวลาสิบนาที

  • เปิดรายชื่อ API secret แล้วเทียบกับทะเบียนที่ทีมจดไว้ อันไหนไม่มีเจ้าของ ให้ลบ
  • เรียงชื่อ event ตามจำนวน หา event ที่ไม่เคยเห็นมาก่อนหรือที่จำนวนโตผิดสังเกต
  • เทียบ key event รายสัปดาห์กับจำนวนแชทใหม่ใน LINE OA ถ้าสองเส้นแยกจากกัน ให้ตรวจก่อนเชื่อ
  • ค้นในที่เก็บโค้ดและ GTM web container ว่าไม่มี secret อยู่ในที่ที่ใครก็อ่านได้ กรณีส่ง event จากเซิร์ฟเวอร์มีรายละเอียดใน บทความ Measurement Protocol กับ LINE

สรุป

ให้ API secret มีสถานะเท่ากับรหัสผ่าน มีเจ้าของ มีอายุ และอยู่ฝั่งเซิร์ฟเวอร์เท่านั้น ส่วนข้อมูลที่ไหลออกไปยังแพลตฟอร์มโฆษณา อย่าให้ key event จาก GA4 ตัวเดียวตัดสินการประมูล โดยไม่มีตัวเลขจากฝั่ง LINE OA มาเทียบ

  • Measurement ID เปิดเผยอยู่แล้ว ตัวกั้นเดียวของ Measurement Protocol คือ API secret
  • ไล่หาจุดที่ secret หลุดได้ ตั้งแต่หน้าเว็บ ที่เก็บโค้ด GTM web ไปจนถึงไฟล์ที่ส่งต่อกันในทีม
  • หมุน secret ด้วยการสร้างใหม่ ย้ายระบบ แล้วลบอันเก่า
  • ใส่ลายเซ็นใน event ของจริง แล้วกรองรายงานตัดสินงบด้วยลายเซ็นนั้น
  • เทียบ key event กับแชทใหม่ใน LINE OA ทุกเดือน

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

Measurement ID หลุดอันตรายไหม

ตัว ID อยู่ในโค้ดหน้าเว็บของทุกเว็บอยู่แล้วจึงไม่ถือเป็นความลับ คนนอกยิง hit ด้วย ID อย่างเดียวผ่านช่องทางของเว็บปกติได้อยู่ดี ส่วน Measurement Protocol ต้องมี API secret ด้วย การป้องกันที่ใช้ได้จริงคือใส่ลายเซ็นใน event ของจริงและกรองในรายงาน

ลบ event ปลอมที่เก็บไปแล้วออกจากรายงานได้ไหม

GA4 ไม่มีปุ่มลบ event รายตัว ที่ Admin มีคำขอลบข้อมูลซึ่งใช้ได้ในบางกรณีและย้อนกลับไม่ได้ ในทางปฏิบัติทีมส่วนใหญ่กรองออกในรายงานแล้วบันทึกช่วงที่เปื้อนไว้ ให้เจ้าของพร็อพเพอร์ตี้เป็นคนตัดสินใจเรื่องการลบ

ถ้าไม่เคยใช้ Measurement Protocol เลย ต้องทำอะไรไหม

เปิดหน้า Measurement Protocol API secrets ของ stream ดูครั้งเดียว ถ้าไม่มีรายการเลยก็ไม่มีช่องให้ยิง ถ้ามีรายการที่ทีมไม่รู้จัก แปลว่ามีใครสร้างไว้ ให้สอบถามแล้วลบถ้าไม่มีเจ้าของ

event ขยะทำให้ Smart Bidding เพี้ยนได้จริงไหม

ถ้า key event นั้นถูกนำเข้า Google Ads เป็น conversion และเป็นตัวหลักที่ระบบใช้ปรับการประมูล ระบบจะเรียนรู้จากสิ่งที่ได้รับ เราวัดไม่ได้ว่าเพี้ยนมากเท่าไร แต่เหตุผลก็เพียงพอที่จะลดเป็น secondary ระหว่างตรวจ

สร้าง API secret หลายอันต่อ stream ได้ไหม

ได้ และควรแยกอันตามระบบที่ใช้ เช่น อันสำหรับ webhook ยอดขาย อันสำหรับงานนำเข้าลีด ทำให้ลบทีละตัวได้เมื่อมีตัวไหนหลุดโดยไม่ทำให้ระบบอื่นหยุดไปด้วย

ใช้ server-side GTM แล้วยังโดนยิงปลอมได้ไหม

ได้ ถ้า endpoint ของ server container เปิดรับคำขอจากทุกที่ ควรให้ client ใน server container ตรวจ header หรือโดเมนต้นทางก่อนส่งต่อ และอย่าลืมว่า container เองก็มี URL สาธารณะ

รู้ว่าโฆษณาเข้า LINE ทำยอดขายจริงแค่ไหน

linli ติดตามลูกค้าตั้งแต่คลิกโฆษณา กดเพิ่มเพื่อน ทักแชท จนปิดการขาย พร้อมส่ง Conversion กลับแพลตฟอร์มโฆษณา เริ่มฟรี 14 วัน

ทดลองใช้ฟรี 14 วัน

บทความที่เกี่ยวข้อง

แก้ GTM พร้อมกันหลายคนแล้วทับงานกันเอง วางลำดับการแก้ยังไงไม่ให้พัง

แก้ GTM พร้อมกันหลายคนแล้วทับงานกันเอง วางลำดับการแก้ยังไงไม่ให้พัง

GTM ปล่อยทั้ง workspace ขึ้นไลฟ์ในครั้งเดียว ทีมที่แก้ร่วมกันจึงปล่อยงานครึ่งทางของกันและกันได้ นี่คือลำดับการแก้และกติกา Publish ที่กันเรื่องนี้
ทราฟฟิกส่วนที่ตัวบล็อกโฆษณากินไปเท่าไหร่ และควรชดเชยตัวเลขอย่างไร

ทราฟฟิกส่วนที่ตัวบล็อกโฆษณากินไปเท่าไหร่ และควรชดเชยตัวเลขอย่างไร

ไม่มีตัวเลขกลางที่ใช้ได้กับทุกเว็บ บทความนี้สอนวัดสัดส่วนที่ตัวบล็อกกินไปจากเว็บของคุณเองด้วย log ของเซิร์ฟเวอร์ และบอกว่าควรชดเชยตัวเลขตรงไหน
กรองทราฟฟิกของทีมตัวเองออกจากรายงาน ก่อนจะหลงดีใจกับตัวเลขที่ทีมทำขึ้นมาเอง

กรองทราฟฟิกของทีมตัวเองออกจากรายงาน ก่อนจะหลงดีใจกับตัวเลขที่ทีมทำขึ้นมาเอง

ทีมแอด นักพัฒนา และเจ้าของธุรกิจเปิดหน้าเว็บทดสอบทุกวัน จนยอดใน GA4 พองเกินจริง บทความนี้สอนตั้งตัวกรอง Internal Traffic และกันแท็กโฆษณาด้วย