N

Nokfa Docs

Current: framework-next.js

ไม่มีชื่อบทความ

คำว่า sanitize ในบริบทของเว็บ หมายถึง

การ "ทำความสะอาด" ข้อมูลก่อนแสดงผล เพื่อ ป้องกันการโจมตี XSS (Cross-site scripting)


ยกตัวอย่างง่าย ๆ

สมมุติว่า content จากไฟล์ JSON หรือฐานข้อมูลเป็นแบบนี้:

{
  "text": "ยินดีต้อนรับ <script>alert('แฮก!')</script>"
}

ถ้าเราใช้ dangerouslySetInnerHTML แล้วไม่ sanitize:

<div dangerouslySetInnerHTML={{ __html: content.text }} />

ผลลัพธ์คือ...

หน้าเว็บจะรัน <script> และเปิด alert — แสดงว่าโดนโจมตี XSS แล้ว!


วิธี Sanitize

เราสามารถใช้ ไลบรารี sanitize ที่เชื่อถือได้ ในฝั่ง frontend ก่อนแสดงผล เช่น:

1. DOMPurify (นิยมมาก)

npm install dompurify

แล้วใช้แบบนี้:

import DOMPurify from 'dompurify';

const cleanHtml = DOMPurify.sanitize(content.text);

return <div dangerouslySetInnerHTML={{ __html: cleanHtml }} />;

DOMPurify จะเอา tag ที่ไม่ปลอดภัย (เช่น <script>, <iframe>, ฯลฯ) ออกให้หมด
และปล่อยให้แค่ <strong>, <em>, <a> ที่เราต้องการยังอยู่


2. ใช้แบบมี whitelist

DOMPurify ยังให้กำหนด whitelist ได้ด้วย เช่น:

DOMPurify.sanitize(content.text, {
  ALLOWED_TAGS: ['strong', 'em', 'a'],
  ALLOWED_ATTR: ['href']
});

สรุปสั้น ๆ

| ทำไมต้อง sanitize? | เพราะ dangerouslySetInnerHTML จะเชื่อ HTML โดยไม่กรองอะไรเลย | | ใช้อะไร sanitize? | ใช้ DOMPurify | | ปลอดภัยแค่ไหน? | ถ้า sanitize แล้ว ก็มั่นใจได้มาก (เกือบที่สุดแล้วในระดับ frontend) |


ถ้าอยากให้ช่วยเขียน utility sanitize function ให้ใช้ในโปรเจกต์ก็ได้นะ บอกได้เลยจ้ะ.