วิธีป้องกัน XSS บน IIS Windows Server 2022 สำหรับเว็บไซต์องค์กรและระบบภายใน
Cross-Site Scripting (XSS) เป็นหนึ่งในช่องโหว่ด้านความปลอดภัยของเว็บไซต์ที่พบได้บ่อยที่สุดในโลก และยังคงติดอันดับความเสี่ยงของ OWASP มาอย่างต่อเนื่อง
แม้ IIS Windows Server 2022 จะมีระบบความปลอดภัยที่ดีอยู่แล้ว แต่หากเว็บไซต์หรือ Web Application ไม่มีการป้องกัน XSS อย่างเหมาะสม ผู้โจมตีอาจสามารถแทรก JavaScript อันตรายเข้าไปในหน้าเว็บ เพื่อขโมย Session, Cookie, Token หรือหลอกให้ผู้ใช้งานดำเนินการบางอย่างโดยไม่รู้ตัว
บทความนี้จะแนะนำวิธีลดความเสี่ยงจาก XSS บน IIS Windows Server 2022 ทั้งในระดับ Web Server และแนวทางที่นักพัฒนาควรใช้งานร่วมกัน
🔐 XSS คืออะไร
XSS ย่อมาจาก
Cross-Site Scripting
เป็นการโจมตีโดยฝัง Script อันตราย
เข้าไปในหน้าเว็บไซต์
เมื่อผู้ใช้งานเปิดหน้าเว็บ
Script จะทำงานบน Browser ของผู้ใช้งาน
แทนที่จะทำงานบน Server
🚨 ผลกระทบของ XSS
🍪 ขโมย Cookie
🔑 ขโมย Session Login
👤 ปลอมตัวเป็นผู้ใช้งาน
📧 ขโมยข้อมูลส่วนตัว
💳 ขโมยข้อมูลทางธุรกิจ
⚠️ Redirect ไปเว็บปลอม
📋 ประเภทของ XSS
① Stored XSS
Script ถูกบันทึกใน Database
② Reflected XSS
Script มาจาก URL
③ DOM-Based XSS
เกิดจาก JavaScript ฝั่ง Client
🖥️ วิธีป้องกัน XSS ด้วย Security Header
เปิด
IIS Manager
เลือกเว็บไซต์
เปิด
HTTP Response Headers
เพิ่ม Content-Security-Policy
Header
Content-Security-Policy
Value
default-src 'self';
script-src 'self';
object-src 'none';
ประโยชน์
ช่วยจำกัดการโหลด Script
จากแหล่งที่ไม่เชื่อถือ
🛡️ เพิ่ม X-Content-Type-Options
Header
X-Content-Type-Options
Value
nosniff
ป้องกัน Browser เดาประเภทไฟล์ผิด
🔒 เพิ่ม Referrer-Policy
Header
Referrer-Policy
Value
strict-origin-when-cross-origin
ลดการรั่วไหลของข้อมูล
⚙️ เพิ่มผ่าน web.config
ตัวอย่าง
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options"
value="nosniff" />
<add name="Referrer-Policy"
value="strict-origin-when-cross-origin" />
<add name="Content-Security-Policy"
value="default-src 'self';" />
</customHeaders>
</httpProtocol>
</system.webServer>
🚀 ใช้ Request Filtering
IIS มีฟีเจอร์
Request Filtering
ช่วยกรอง Request ที่ผิดปกติ
เปิด
IIS Manager
เลือกเว็บไซต์
เปิด
Request Filtering
สามารถกำหนด
URL
Extension
Query String
ที่ไม่อนุญาตได้
🔍 จำกัด Dangerous Characters
ตัวอย่าง
<
>
script
javascript:
สามารถกรองได้ผ่าน
Application Layer
🌐 แนวทางสำหรับนักพัฒนา
แม้ IIS จะช่วยได้
แต่การป้องกัน XSS หลัก
ต้องอยู่ที่ Source Code
HTML Encode
ตัวอย่าง
แทน
<script>
ควรแสดงเป็น
<script>
Validate Input
ตรวจสอบข้อมูลทุกช่อง
ก่อนบันทึกลง Database
Escape Output
ก่อนแสดงผลบนหน้าเว็บ
หลีกเลี่ยง Inline JavaScript
🔒 เปิด HttpOnly Cookie
ช่วยป้องกัน Script อ่าน Cookie
ใน IIS
สามารถกำหนด
HttpOnly
ให้ Session Cookie
🔐 เปิด Secure Cookie
Cookie จะถูกส่งเฉพาะ HTTPS
ช่วยลดความเสี่ยงจากการดักจับข้อมูล
⚡ เปิด SameSite Cookie
กำหนด
SameSite=Strict
ช่วยลดการโจมตีร่วมกับ CSRF
🔍 ตรวจสอบผ่าน Browser
เปิด
https://example.com
กด
F12
ดู
Response Headers
ตรวจสอบ CSP
และ Security Headers
🧪 ตรวจสอบผ่าน PowerShell
Invoke-WebRequest `
https://example.com
ตรวจสอบ Header
ที่ส่งกลับ
❌ ปัญหาที่พบบ่อย
CSP เข้มเกินไป
Script ไม่ทำงาน
Third-Party Script ถูกบล็อก
เช่น
Analytics
Chat Widget
Application เก่าใช้งานไม่ได้
ต้องปรับ CSP ให้เหมาะสม
Header ซ้ำ
กำหนดทั้ง IIS และ Application
📋 XSS Prevention Checklist
✅ Content-Security-Policy
✅ X-Content-Type-Options
✅ Referrer-Policy
✅ HTTPS
✅ HttpOnly Cookie
✅ Secure Cookie
✅ SameSite Cookie
✅ Input Validation
✅ Output Encoding
🛡️ Best Practices
① ใช้ CSP ทุกเว็บไซต์
② Validate Input ทุกจุด
③ Escape Output ทุกครั้ง
④ เปิด HttpOnly Cookie
⑤ ใช้ HTTPS เท่านั้น
⑥ ตรวจสอบ OWASP Top 10 เป็นประจำ
ทีมงาน comsiam มักรวมการป้องกัน XSS เข้าไปในมาตรฐาน Web Application Security ตั้งแต่ขั้นตอนพัฒนาเว็บไซต์ และเสริมด้วย Security Header บน IIS Windows Server 2022 เพื่อสร้างการป้องกันหลายชั้นสำหรับระบบ Production
🎯 สรุป
XSS เป็นหนึ่งในช่องโหว่ที่พบได้บ่อยที่สุดในเว็บไซต์และระบบ Web Application โดยสามารถนำไปสู่การขโมย Session, Cookie และข้อมูลสำคัญของผู้ใช้งานได้
บน IIS Windows Server 2022 ควรใช้ Security Header เช่น Content-Security-Policy, X-Content-Type-Options และการตั้งค่า Cookie Security ร่วมกับการเขียนโปรแกรมที่ถูกต้อง เช่น Input Validation และ Output Encoding เพื่อสร้างระบบป้องกันแบบหลายชั้นและลดความเสี่ยงจากการโจมตี XSS ได้อย่างมีประสิทธิภาพ