- vừa được xem lúc

Từ Zero đến Principal Frontend Engineer (P6: Frontend Security Mastery)

0 0 2

Người đăng: Albert Huynh

Theo Viblo Asia

Khi bạn đạt đến level Principal Frontend Engineer, bạn không chỉ code mà còn phải định hướng kiến trúc, giảm rủi ro hệ thống, và đảm bảo an toàn cho người dùng. Security không còn là việc của riêng Backend hay DevOps – nếu ứng dụng của bạn bị tấn công, bạn sẽ là người đầu tiên nhận trách nhiệm.

Dưới đây là cách tôi tiếp cận Frontend Security


1. Security Là Một Phần Của Kiến Trúc, Không Phải "Thêm Vào Sau"

🔐 Nguyên Tắc Thiết Kế

  • "Secure By Default": Mọi thành phần mới phải tuân thủ security guidelines ngay từ đầu.
  • "Least Privilege": Giới hạn quyền tối đa cần thiết (vd: API chỉ được truy cập từ domain cụ thể).
  • "Defense In Depth": Nhiều lớp bảo vệ (CSP + CORS + Input Sanitization).

📌 Case Study: Lỗi XSS Trong Widget Third-Party

  • Vấn đề: Một team sử dụng chat widget từ nhà cung cấp bên thứ ba, nhưng không kiểm tra kỹ, dẫn đến DOM-based XSS.
  • Giải Pháp Của Principal FE:
    • CSP nghiêm ngặt để chặn inline script.
    • SRI (Subresource Integrity) để đảm bảo script không bị tampered.
    • Isolate widget trong Shadow DOM để giảm attack surface.
<script src="https://third-party.com/widget.js" integrity="sha384-..." crossorigin="anonymous">
</script>

2. Không Chỉ Fix Vulnerabilities, Mà Phải Ngăn Chặn Từ Gốc

🛡️ Cách Tôi Triển Khai Security Trong Code Review

Loại Lỗi Câu Hỏi Khi Review Cách Phòng Ngừa
XSS "Data này có được escape/sanitize trước khi render không?" Bắt buộc dùng thư viện như DOMPurify.
CSRF "API này có CSRF token hoặc SameSite cookie không?" Yêu cầu tích hợp CSRF middleware.
CORS "Có cần thiết để Access-Control-Allow-Origin: * không?" Chỉ cho phép domain cụ thể.

🔍 Ví Dụ Thực Tế: Lỗ Hổng Trong Form Upload

  • Phát Hiện: Một form upload cho phép file .html, có thể dẫn đến Stored XSS.
  • Cách Xử Lý:
    // ❌ Nguy hiểm: Cho phép mọi file type
    accept="*" // ✅ Principal Engineer sẽ enforce:
    accept=".jpg,.png,.pdf" // Chỉ cho phép file an toàn
    
    • Server-side validation (dù là Frontend, tôi vẫn yêu cầu Backend kiểm tra lại).

3. Không Chỉ Code – Mà Còn Là Quy Trình & Văn Hóa

📜 Security Checklist Trước Khi Release

Tôi đưa vào quy trình của team:

  1. Dependency Scanning (npm audit, Snyk).
  2. Automated Security Testing (OWASP ZAP trong CI/CD).
  3. Manual Pentest cho critical features (nếu cần).

👥 Đào Tạo Team Về Security Awareness

  • Workshop hàng quý về các lỗ hổng mới (ví dụ: Prototype Pollution).
  • Capture The Flag (CTF) mini để team thực hành.

4. Khi Sự Cố Xảy Ra – Cách Một Principal FE Phản Ứng

🚨 Quy Trình Xử Lý Incident

  1. Ngay lập tức: Rollback nếu cần.
  2. Forensic Analysis: Xác định root cause (vd: Lỗi từ thư viện nào?).
  3. Hotfix: Patch nhanh + test nghiêm ngặt.
  4. Post-mortem: Viết báo cáo & cải tiến process.

💡 Bài Học Từ Một Real Incident

  • Sự cố: Một thư viện npm bị compromised, inject malware vào production.
  • Action của tôi:
    • Tắt ngay CDN chứa thư viện độc hại.
    • Chuyển sang locked dependencies (package-lock.json nghiêm ngặt).
    • Triển khai automated SBOM (Software Bill of Materials) để theo dõi dependencies.

Kết Luận: Tư Duy Security Của Một Principal Engineer

Là một Principal Frontend Engineer, tôi không chỉ giải quyết vấn đề – mà thiết kế hệ thống để ngăn chúng xảy ra. Cụ thể:

Security là requirement ngang hàng với performance và UX.
Mọi decision (từ chọn thư viện đến API design) đều cân nhắc risk.
Không chỉ bảo vệ ứng dụng – mà còn đảm bảo an toàn cho người dùng.

Hãy comment để tôi biết bạn quan tâm chủ đề nào tiếp theo nhé! 🚀

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thủ thuật nhỏ để căn chỉnh image với object-fit

Chào các bạn,. Có lẽ trong hành trình code của các bạn thì không ít lần gặp vấn đề méo ảnh do fix cứng cả width, height của ảnh nhỉ? Hoặc kể cả khi bạn set value cho 1 thuộc tính weigth hoặc height còn thuộc tính còn lại để auto thì nhiều lúc ảnh cũng không được hiển thị toàn vẹn cho lắm.

0 0 55

- vừa được xem lúc

Tìm hiểu về CSS framework - Bulma

Mở đầu:. Mấy bữa nay đang lướt web thấy có giới thiệu framework bulma này, được mọi người giới thiệu gọn nhẹ và dễ sử dụng, nên mình mới tìm hiểu thử và hôm nay xin viết 1 bài viết giới thiệu sơ qua với các bạn.

0 0 39

- vừa được xem lúc

Một số mẹo vặt "hay ho" của ES6 có thể bạn chưa biết - Phần 4

Xin chào, ở 3 bài trước của series "Một số mẹo vặt "hay ho" của ES6", mình đã chia sẻ 1 số tips/tricks nhỏ với ES6, hy vọng ít nhiều nó sẽ có ích với các bạn khi áp dụng vào thực tế. Hôm nay, xin mời các bạn theo dõi phần 4 của series này.

0 0 50

- vừa được xem lúc

Tìm hiểu về Jest Mocks Test phía frontend

Giới thiệu. Chắc hẳn không ai phủ nhận rằng UnitTest là 1 phần quan trọng trong giai đoạn phát triển phần mềm, đảm bảo cho code được coverage tránh các bug không mong muốn.

0 0 41

- vừa được xem lúc

Convert từ SVG sang Icon Font như thế nào?

Chào các bạn. Như câu hỏi trên title của bài viết, hôm nay mình sẽ hướng dẫn các bạn cách convert 1 file svg 1 cách khá đơn giản và vô cùng tiện lợi cho các bạn. https://icomoon.io/app/#/select.

0 0 63

- vừa được xem lúc

Một vài thủ thuật làm việc với các dạng layout - Phần 4

. Chào mọi người, cũng đã lâu rồi mình không thấy nhau. Để tiếp tục với series's về các dạng layout hôm nay mình sẽ chia sẻ thêm một trick thú vị nữa về step layout.

0 0 49