Tổng hợp 11 biện pháp bảo mật về lập trình an toàn trong phát triển ứng dụng Web

Trong bài viết này, tôi sẽ tổng hợp lại các biện pháp bảo mật ở mức cao (mức khái niệm). Đưa ra các yêu cầu về lập trình an toàn trong phát triển Web, để người lập trình cần phải xử lý và cài đặt mã nguồn, giúp cho ứng dụng web đảm bảo được mức an toàn cao nhất có thể. Bảo vệ được hệ thống dữ liệu và người dùng. Bạn đọc có thể coi đây là checklist để kiểm tra ứng dụng web của mình.

Tổng hợp 11 biện pháp bảo mật về lập trình an toàn trong phát triển ứng dụng Web

Nội dung của bài viết là các biện pháp kỹ thuật mà tôi đã được học và áp dụng tại trung tâm phát triển phần mềm Viettel, bây giờ là Viettel ICT. Trước tôi từng làm việc ở đó. Hi vọng bài đọc này có thể giúp ích được cho các sản phẩm, ứng dụng của các bạn tốt hơn và được an toàn hơn.

1. Tương tác với cơ sở dữ liệu tránh lỗ hổng SQL Injection

  • Dữ liệu input từ người dùng phải được truyền dưới dạng tham số, không được sử dụng cách cộng xâu (string)trong các truy vấn tới cơ sở dữ liệu.
  • Tìm hiểu về lỗ hổng: SQL Injection

2. Xử lý dữ liệu đầu vào tránh lỗ hổng XSS

  • Mã hóa dữ liệu dạng HTML các ký tự đặc biệt do người dùng gửi lên máy chủ và các ký tự đặc biệt trong cơ sở dữ liệu trước khi gửi tới người dùng.
  • Tìm hiểu về lỗ hổng: XSS

3. Sử dụng Token trong các phương thức GET và POST tránh lỗ hổng CSRF

  • Trong các tương tác của người dùng với cơ sở dữ liệu thông qua các form, liên kết, sử dụng thêm biến token (được tạo ra mỗi đầu phiên truy cập của người dùng) như một tham số trong phương thức GET hoặc POST và kiểm tra giá trị token này tại máy chủ để xác nhận hành vi của người dùng.
  • Tìm hiểu về lỗ hổng: CSRF

4. Kiểm soát các thao tác với file

  • Giới hạn chỉ cho phép các định dạng file theo yêu cầu của ứng dụng được phép upload lên máy chủ. Kiểm soát file upload ở phía máy chủ. Lưu trữ các file upload tại một thư mục riêng nằm ngoài thư mục web hoặc không cho phép truy cập, hay thực thi trên các thư mục đó.
  • Chặn các kí tự \, /, null và kiểm tra phần mở rộng của file khi xử lý với tên file trên máy chủ.
  • Tìm hiểu về lỗ hổng: Path traversal attack

5. Mã hóa dữ liệu nhạy cảm

  • Những dữ liệu nhạy cảm trong cơ sở dữ liệu cần được mã hóa.

6. Kiểm tra quyền truy cập của người dùng

  • Kiểm soát quyền của người dùng trong mỗi request lên máy chủ.

7. User enumeration

  • Sử dụng chung thông báo lỗi cho cả 2 trường hợp nhập sai tên đăng nhập và mật khẩu trên trang đăng nhập vào hệ thống. Nhằm tránh trường hợp thông báo lỗi trên trang đăng nhập phân biệt giữa nhập sai tên đăng nhập và sai mật khẩu Dựa vào đó hacker có thể thử và tìm ra các user có trên hệ thống.

8. Session fixation

  • Renew session sau khi đăng nhập và xóa session cũ (trên Server) sau khi log out. Tránh trường hợp Session của ứng dụng trước và sau khi đăng nhập không thay đổi. Hacker có thể sử dụng lỗ hổng này để đăng nhập mà không cần biết user/password.

9. Session Hijacking

  • Không cho phép 2 phiên truy cập đồng thời, session được xây dựng từ các thông tin hướng người dùng (IP, User-Agent hoặc địa chỉ MAC).

10. HTTP Only cookie

  • Yêu cầu thiết lập thuộc tính "HTTP Only" cho session cookie. Vì nếu Session cookie không được set thuộc tính "HTTP Only". Hacker có thể sử dụng mã javascript để ăn cắp thông tin của người dùng.

11. Chuyển hướng và chuyển tiếp thiếu thẩm tra

  • Không cho phép người dùng cuối có thể can thiệp vào quá trình redirect từ ứng dụng này sang ứng dụng khác. Nếu cần sử dụng thì URL phải được kiểm tra, đảm bảo URL được redirect đến nằm trong danh sách cho phép của ứng dụng. Nếu không được kiểm tra, kẻ tấn công có thể redirect đến URL có nhiễm mã độc để cài đặt phần mềm độc hại, hoặc lừa nạn nhân khai báo mật khẩu, hoặc những thông tin nhạy cảm khác.

techtalk