Web Security ต้องเข้าใจทั้งข้อจำกัดของ Browser และรูปแบบโจมตีที่ใช้ประโยชน์จาก cookie, script และ input ของผู้ใช้ เช่น CORS, CSRF, XSS และ SQL Injection
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart LR
subgraph Era1["ยุค Same-Origin / Browser Boundary"]
A["Same-Origin Policy
จำกัด cross-origin"]
end
subgraph Era2["ยุค Cross-Origin API"]
B["CORS
อนุญาต origin ที่กำหนด"]
C["CSRF
ปลอม request ด้วย cookie"]
end
subgraph Era3["ยุค Script Injection Defense"]
D["XSS
ฝัง script อันตราย"]
E["CSP + Sanitize
ลดความเสี่ยง"]
end
A --> B --> C --> D --> E
Access-Control-Allow-Origin กำหนด Domain ที่อนุญาต| ภัยคุกคาม | โจมตีอะไร | วิธีป้องกัน |
|---|---|---|
| CORS ผิดพลาด | Cross-origin access | จำกัด origin ที่ไว้ใจ |
| CSRF | Request ที่ใช้ cookie | CSRF token, SameSite |
| XSS | Script ในหน้าเว็บ | sanitize, escape, CSP |
| SQL Injection | Query ฐานข้อมูล | parameterized query, ORM |
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart TD
A["Attacker Site
เว็บโจมตี"] --> B["Victim Browser
เบราว์เซอร์ผู้ใช้"]
B --> C["Target API
API เป้าหมาย"]
D["Malicious Input
input อันตราย"] --> E["XSS Script
script ถูกฝัง"]
E --> B
C --> F["Protection
CORS CSRF CSP SQL Params"]
// security-middleware-demo.mjs
// ตัวอย่างตั้งค่า CORS และ security headers แบบพื้นฐาน
import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
const app = express();
app.use(express.json());
app.use(cors({
origin: ['http://localhost:4200', 'https://example.com'],
credentials: true
}));
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"]
}
}
}));
app.post('/comment', (req, res) => {
// ตัวอย่าง: ควร sanitize/validate ก่อนบันทึกลงฐานข้อมูล
const safeText = String(req.body.text ?? '').replaceAll('<', '<');
res.json({ saved: safeText });
});
app.listen(3000, () => console.log('Security demo on http://localhost:3000'));
// ตัวอย่างการใช้งาน:
// npm install express cors helmet
// ส่ง POST /comment พร้อม body { "text": "<script>alert(1)</script>" }
<script> และอธิบายวิธีป้องกัน