12/08/2018, 16:32

Các vấn đề về bảo mật trong các ứng dụng Web

Lần này tôi sẽ chia sẻ với các bạn về các vấn đề bảo mật trong các mô hình ứng dụng web và có sự chuẩn bị thực tiễn để tránh gặp phải chúng. Tôi hy vọng bài viết này sẽ giúp ích cho các lập trình viên hiểu rõ hơn về một số vấn đề xuất hiện đến 80% các ứng dụng ngày nay. Password Hasing Rất ...

Lần này tôi sẽ chia sẻ với các bạn về các vấn đề bảo mật trong các mô hình ứng dụng web và có sự chuẩn bị thực tiễn để tránh gặp phải chúng. Tôi hy vọng bài viết này sẽ giúp ích cho các lập trình viên hiểu rõ hơn về một số vấn đề xuất hiện đến 80% các ứng dụng ngày nay.

Password Hasing

Rất nhiều người sử dụng thuật toán băm MD5, SHA512 để băm mật khẩu. Hãy dừng việc làm này lại, chúng đã lạc hậu rồi. Bạn có thể nghĩ chúng không phải là lựa chọn tốt nhất do mã hóa yếu, nhưng nó không phải là vấn đề chính. Lý do chính là nó "nhanh", điều này có nghĩa trong các cuộc tấn công thì hàng triệu mật khẩu có thể được thử trên một GPU, khi đó với các thuật toán băm trên thì mật khẩu có thể được dò ra một cách nhanh chóng nhất. Giải pháp tôi cho là khả thi nhất (không chỉ có cách này) là sử dụng BCrypt để lưu trữ mật khẩu người dùng, nó là một hàm băm thích nghi dựa trên thuật toán mã hóa khóa đối xứng Blowfish. BCrypt cũng giới thiệu một yếu tố để làm việc, giá trị xác định làm thế nào làm chậm chức năng băm. Các giá trị cao hơn sẽ cho công việc băm sẽ mất nhiều thời gian hơn và sẽ tạo ra các giá trị băm khác nhau, điều này làm cho nó an toàn với các cuộc tấn công mạnh Bạn muốn băm mật khẩu vì ai đó truy cập cơ sở dữ liệu của ứng dụng, họ không thể khôi phục các phiên bản gốc của mật khẩu (nếu nó được băm đúng cách) Tôi có một câu hỏi khá hay: Tại sao băm mật khẩu ở back-end mà không phải là front-end? Trong cả hai trường hợp mật khẩu được hash được lưu ở cơ sở dữ liệu có phải không? Câu trả lời là KHÔNG!!! Nếu băm mật khẩu ở back-end, hacker phải crack lần đầu tiên (mang lại phiên bản gốc) để sử dụng chúng trên trang web của bạn, nhưng nếu băm ở front-end, hacker không cần làm điều này, họ có thể vượt qua được mã băm vì nó được lưu trong cơ sở dữ liệu.

XSS

Những người đang sử dụng jQuery hoặc Javascript sẽ chắc chắn gặp phải vấn đề này vì không có cơ chế để thực hiện XSS. Thậm chí nếu có, nó thực sự không cần thiết. Hãy cùng xem ví dụ sau chèn thêm dữ liệu với innnerHTML có thể gây ra các vấn đề nghiêm trọng như responseText từ back-end có thể là một cái gì đó không mong muốn như sau

<img onerror=”alert(‘XSS attacked’)” src=”NotAProperUrlhere”>

và mã JavaScript của ai đó sẽ chạy trên trình duyệt của bạn. Thật vi diệu phải không            </div>
            
            <div class=

0