Tìm hiểu cách tấn công Stored XSS qua Database và Reflected XSS dùng cho Phishing giả mạo
Mã độc Javascript được người dùng gửi lên và lưu trữ trực tiếp vào Database của Server (hoặc file lưu trữ). Khi các người dùng khác truy cập trang web, mã độc này sẽ tự động tải về trình duyệt của họ và thực thi.
// server.js (Vulnerable code mô phỏng)
app.post('/api/ch3/comments', (req, res) => {
ch3Comments.push(req.body.comment); // Lưu trực tiếp
});
app.get('/api/ch3/comments/vulnerable', (req, res) => {
res.json({ comments: ch3Comments }); // Trả về raw
});
Hậu quả: Đánh cắp Cookie session của người dùng, thực thi hành vi bất hợp pháp nhân danh họ, hoặc làm hỏng giao diện trang web.
Sử dụng cơ chế lọc hoặc mã hóa thực thể HTML (như htmlspecialchars) trước khi in ra giao diện.
// Vá lỗi phía Server
const escaped = ch3Comments.map(c =>
c.replace(/</g, '<').replace(/>/g, '>')
);
Mã độc Javascript không được lưu trên server mà xuất hiện trực tiếp trong request (thường là Query Parameter trên URL) và phản chiếu ngay lập tức về trình duyệt của người dùng gửi request đó.
Hacker có thể truyền một đoạn mã HTML/CSS tạo dựng một form đăng nhập giả mạo đè lên trang web uy tín để lừa người dùng nhập tài khoản/mật khẩu.
Trong bài thực hành này, hãy kiểm nghiệm việc nhập code HTML dạng form Login vào ô Bio mô tả bản thân để tạo trang đăng nhập giả của Facebook hoặc Google.
Thử nhập mã độc sau để kiểm nghiệm:
<script>alert("Stored XSS triggered!");</script><img src="invalid" onerror="alert('XSS via Image!')">