Cách thiết kế biểu mẫu web an toàn: Xác thực, Vệ sinh và Kiểm soát

Mặc dù an ninh mạng thường được nghĩ đến về cơ sở dữ liệu và kiến ​​trúc, nhưng phần lớn tư thế bảo mật mạnh mẽ dựa vào các yếu tố trong miền của nhà phát triển front-end.

Đối với một số lỗ hổng có khả năng tàn phá nhất định như SQL injection và Cross-Site Scripting (XSS), giao diện người dùng được coi là tốt là tuyến phòng thủ đầu tiên.

Dưới đây là một số lĩnh vực trọng tâm dành cho các nhà phát triển front-end, những người muốn giúp chiến đấu tốt.

Kiểm soát đầu vào của người dùng

Toàn bộ những điều điên rồ có thể xảy ra khi các nhà phát triển xây dựng một biểu mẫu không kiểm soát được đầu vào của người dùng. Để chống lại các lỗ hổng như tiêm, điều quan trọng là phải xác thực hoặc khử trùng đầu vào của người dùng.

Bạn có thể xác thực đầu vào bằng cách ràng buộc nó với các giá trị đã biết, chẳng hạn như bằng cách sử dụng các kiểu nhập ngữ nghĩa hoặc các thuộc tính liên quan đến xác thực trong biểu mẫu. Các khung công tác như Django cũng trợ giúp bằng cách cung cấp các loại trường cho mục đích này. Việc dọn dẹp dữ liệu có thể được thực hiện bằng cách xóa hoặc thay thế các ký tự nguy hiểm theo ngữ cảnh, chẳng hạn như bằng cách sử dụng danh sách trắng hoặc thoát dữ liệu đầu vào.

Mặc dù nó có thể không trực quan, nhưng ngay cả dữ liệu mà người dùng gửi đến khu vực của họ trên trang web cũng phải được xác thực. Một trong những loại virus sinh sôi nảy nở nhanh nhất là sâu Samy trên MySpace (vâng, tôi già rồi), nhờ mã mà Samy Kamkar đã có thể đưa vào trang hồ sơ của chính mình. Không trả lại trực tiếp bất kỳ thông tin đầu vào nào cho trang web của bạn mà không có xác nhận hoặc vệ sinh kỹ lưỡng.

Để biết thêm một số hướng dẫn về cách chiến đấu với các cuộc tấn công tiêm chích, hãy xem Tờ OWASP Phòng chống Tiêm kích.

Cẩn thận với các trường ẩn

Thêm type="hidden"là một cách tiện lợi hấp dẫn để ẩn dữ liệu nhạy cảm trong các trang và biểu mẫu, nhưng tiếc là không phải là một cách hiệu quả.

Với các công cụ như ZapProxy và thậm chí các công cụ kiểm tra trong các trình duyệt web đơn giản, người dùng có thể dễ dàng nhấp chuột để tiết lộ các thông tin vô hình hấp dẫn.

Việc ẩn các hộp kiểm có thể là một mẹo nhỏ để tạo các công tắc chỉ dành cho CSS, nhưng các trường ẩn đóng góp rất ít vào bảo mật.

Xem xét cẩn thận các trường tự động điền

Khi người dùng chọn cung cấp cho bạn Thông tin nhận dạng cá nhân (PII) của họ, đó phải là một lựa chọn có ý thức. Các trường biểu mẫu tự động điền có thể thuận tiện - cho cả người dùng và kẻ tấn công. Khai thác bằng cách sử dụng các trường ẩn có thể thu thập PII đã được trường tự động hoàn thành thu thập trước đó.

Nhiều người dùng thậm chí không biết thông tin tự động điền trên trình duyệt của họ đã được lưu trữ. Sử dụng các trường này một cách tiết kiệm và tắt các biểu mẫu tự động điền đối với dữ liệu đặc biệt nhạy cảm.

Điều quan trọng là cũng phải cân nhắc hồ sơ rủi ro của bạn so với sự đánh đổi của nó. Nếu dự án của bạn phải tuân thủ WCAG, việc tắt tính năng tự động hoàn thành có thể phá vỡ đầu vào của bạn cho các phương thức khác nhau. Để biết thêm, xem 1.3.5: Xác định Mục đích Đầu vào trong WCAG 2.1.

Giữ lỗi chung chung

Mặc dù có vẻ hữu ích khi cho người dùng biết liệu một phần dữ liệu có tồn tại hay không, nhưng nó cũng rất hữu ích đối với những kẻ tấn công. Khi xử lý tài khoản, email và PII, cách an toàn nhất là sai (?) Ở bên ít hơn. Thay vì trả về "Mật khẩu của bạn cho tài khoản này không chính xác", hãy thử phản hồi mơ hồ hơn "Thông tin đăng nhập không chính xác" và tránh tiết lộ tên người dùng hoặc email có trong hệ thống hay không.

Để hữu ích hơn, hãy cung cấp một cách nổi bật để liên hệ với một người trong trường hợp có lỗi xảy ra. Tránh tiết lộ thông tin không cần thiết. Nếu không có gì khác, vì Chúa, đừng đề xuất dữ liệu trùng khớp với đầu vào của người dùng.

Là một kẻ xấu

Khi xem xét vấn đề bảo mật, sẽ rất hữu ích nếu bạn lùi lại một bước, quan sát thông tin trên màn hình và tự hỏi bản thân làm thế nào mà kẻ tấn công ác ý có thể sử dụng nó. Chơi trò bênh vực ma quỷ. Nếu kẻ xấu nhìn thấy trang này, họ sẽ thu được thông tin mới nào? Chế độ xem có hiển thị bất kỳ PII nào không?

Tự hỏi bản thân xem mọi thứ trên trang có thực sự cần thiết cho một người dùng chân chính hay không. Nếu không, hãy chỉnh sửa lại hoặc loại bỏ nó. Ít hơn là an toàn hơn.

An ninh bắt đầu ở cửa trước

Ngày nay, có rất nhiều sự chồng chéo giữa mã hóa ở front end và back end. Để tạo ra một ứng dụng toàn diện và an toàn, giúp bạn có hiểu biết chung về những cách mà kẻ tấn công có thể đặt chân vào cửa trước.