Bảo vệ ứng dụng khỏi các cuộc tấn công (SQL injection, XSS, …)

Có rất nhiều cách tấn công vào một ứng dụng của bạn. Nhưng tôi xin hướng dẫn cách phòng chống những tấn công căn bản, thường dùng nhất.

SQL Injection

  • Đối với các ứng dụng kết nối với CSDL, ta hay dùng các yêu cầu từ client để truy vấn trực tiếp đến CSDL. Kẻ phả hoại sẽ dựa vào điều này để tấn công vào CSDL.
  • Ví dụ: Một chức năng đăng nhập. Request gửi một username và password tới server. Bạn dùng username và password này để truy vấn trực tiếp trong CSDL. Câu lệnh như sau: SELECT * FROM user WHERE username=’username’ AND password=’password’
  • Nếu kẻ tấn công thay username thành ‘ OR ‘1’=’1 . Câu truy vấn lúc này sẽ thành SELECT * FROM user WHERE username=” OR ‘1’=’1′ AND password=’abc’. Lúc này mọi điều kiện đều hợp lệ và thế là truy vấn trả về kết quả đúng. Hãy tưởng tượng kẻ phá hoại chèn những đoạn mã xoá bảng, CSDL thì đó thật nguy hiểm.
  • Hiện nay các framework đều hỗ trợ phòng chống cách này thông qua builder query. Nghĩa là sẽ cung cấp một khuôn mẫu và các parameter của truyền vô sẽ là kiểu text, kiểu số,… hoàn toàn.
  • Encode, escape parameter của bạn đối với những ký tự đặc biệt.
  • Kết luận: Để tránh SQL Injection ta không nên dùng query string(RAW) để truy vấn. Hoặc nếu có dùng hãy xử lý dữ liệu trước khi query. Dùng query build do các framework cung cấp.

CSRF

  • Một ứng dụng website của bạn gửi form dữ liệu đến server để xử lý. Sẽ như thế nào nếu như kẻ tấn công bắt được gói tin này và giả mạo gửi một form dữ liệu khác vô server.
  • Để chống cách này ta dùng CSRF token. Khi submit dữ liệu được gủi đến server sẽ đi kèm với một token. Server sẽ kiểm tra token này có hợp lệ và cho access hay không.

XSS

  • Đây là cách tấn công từ client. Thường hay thấy ở các diễn đàn, bài post… . Lợi dụng sơ hở về việc không kiểm tra nội dung của bài đăng và lưu trực tiếp xuống CSDL, kẻ tấn công sẽ dựa vào điểm này để thực hiện một javascript lấy thông tin, điều hướng trang web, logout,…
  • Đối với những trang web có chức năng upload file, việc định dạng kiểu file rất quan trọng. Sẽ ra sao nếu bạn cho phép upload file đuôi php lên server, kẻ tấn công sẽ dùng file đó như là một shell để tấn công toàn bộ hệ thống của bạn.
  • Cách phòng chống là hãy escape các kí tự đặc biệt trước khi lưu xuống CSDL. Định dạng đuôi file đối với việc cho phép upload file
Bài viết liên quan