Thực tiễn tốt nhất cho Xác thực / Bảo mật ứng dụng web (Mọi nền tảng)


12

Hôm nay tôi có một câu hỏi từ người quản lý hỏi tôi suy nghĩ của tôi về những gì được coi là thiết kế có thể chấp nhận để xác thực ứng dụng biểu mẫu web, đặc biệt là liên quan đến bản chất của nhiều trình duyệt phổ biến đối với "Ghi nhớ mật khẩu" cho các trường đăng nhập mật khẩu tên người dùng thông thường của bạn .

Tôi gặp khó khăn khi đưa ra một câu trả lời mà tôi cảm thấy có thể chấp nhận được. Trước những sai sót về bảo mật của Sony, tôi thực sự muốn cẩn thận, mặc dù dữ liệu được lưu trữ trên người có độ nhạy thấp hơn. Chúng tôi không lưu trữ số an sinh xã hội hoặc thậm chí địa chỉ tuy nhiên chúng tôi đang lưu trữ số điện thoại, địa chỉ email và ảnh của khách truy cập.

Anh ta lo ngại rằng người dùng có thể chỉ cần Ghi nhớ Mật khẩu trên thiết bị đầu cuối công cộng, sau đó ai đó có thể chỉ cần nhảy vào thiết bị đầu cuối này và bắt đầu xem hoặc sửa đổi dữ liệu theo cách trái phép. Tuy nhiên, tôi khá chắc chắn rằng ít nhất trên các máy trạm Windows mà trình duyệt sẽ không "Ghi nhớ mật khẩu" trên các tài khoản người dùng Windows.

Ngoài ra, tôi đang thực hiện mã hóa mật khẩu một chiều ở phía máy chủ (lưu trữ mật khẩu được mã hóa trong cơ sở dữ liệu, mã hóa mật khẩu do người dùng cung cấp trên máy chủ, so sánh với chuỗi được mã hóa từ cơ sở dữ liệu). Không có kế hoạch ngay lập tức để kết hợp mã hóa SSL tuy nhiên đây vẫn là một tùy chọn.

Có bất kỳ lỗ hổng bảo mật lớn với phương pháp này? Bạn có gợi ý nào tốt hơn không?


Khi lưu trữ mật khẩu được mã hóa một chiều (tức là băm), hãy đảm bảo bạn sử dụng hàm băm mạnh (không phải MD5) hoặc muối mật khẩu (xem stackoverflow.com/questions/420843/, ) hoặc cả hai.
Jordan Reiter

Kiểm tra trang web OWASP ( owasp.org ). Họ có rất nhiều thông tin bảo mật rất hữu ích, bao gồm cả "bảng cheat" cho các giao thức khác nhau.
Ralph

Có một số hướng dẫn về xác thực trang web dựa trên biểu mẫu tại đây stackoverflow.com/a/477578/463478
Only You

Câu trả lời:


13

Một số lời khuyên cấp cao:

  1. Chỉ lưu trữ dữ liệu bạn cần
  2. Luôn mã hóa dữ liệu nhạy cảm (SSN, mật khẩu, thẻ tín dụng #, v.v.) khi bạn lưu trữ
  3. Luôn mã hóa lưu lượng bằng SSL khi truyền / nhận dữ liệu nhạy cảm
  4. Nếu nghi ngờ về độ nhạy cảm của thông tin, hãy mã hóa nó
  5. Không tin tưởng đầu vào của người dùng (ai đó sẽ cố gắng nhập nội dung xấu)
  6. Không tin tưởng dữ liệu của bạn (ai đó có thể thay đổi dữ liệu trong cơ sở dữ liệu - ví dụ: tiêm đoạn mã độc hại)
  7. Đừng cuộn mã hóa của riêng bạn
  8. Bảo mật các máy chủ lưu trữ các ứng dụng / cơ sở dữ liệu
  9. Tăng gánh nặng cho người dùng cuối vì mục đích bảo mật (hạn chế mật khẩu, không bao giờ để lộ mật khẩu, không gửi URL trong email, giảm thời gian phiên, v.v.)

Gợi ý của tôi cho bạn là lấy một cuốn sách về bảo mật các ứng dụng Web. Có quá nhiều thông tin để truyền tải trong một câu trả lời / blog / bài viết. Chủ đề của mã hóa một mình là đáng kể.


Lý do đằng sau việc sử dụng SSL thay vì sử dụng mã hóa của chính mình là gì? Bạn có cân nhắc sử dụng cái gì đó như WS-Security cuộn mã hóa của riêng bạn không? Thiết lập SSL có thể là một nỗi đau.
Ông Jefferson

Đây là danh sách kiểm tra tốt. Tôi ngạc nhiên rằng không có nhiều phiếu bầu hơn cho nó.
Kristofer Hồ Chí Minh

2
@ Mr.Jefferson Tôi muốn nói 99.999999% thời gian bạn KHÔNG BAO GIỜ muốn "cuộn mã hóa của riêng mình".
Zach Leighton

2

Bạn có thể cố gắng vượt quá hành vi trình duyệt - một số lời khuyên tốt ở đây:

/programming/32369/disable-browser-save-password-feftality


1
Liên kết tốt. Cá nhân tôi không nghĩ rằng đó là công việc của chúng tôi khi các nhà phát triển ghi đè các lựa chọn của người dùng như vậy, nhưng tôi đã tạo một trang web cho một khách hàng yêu cầu nó, vì vậy điều quan trọng là phải biết cách thực hiện.
Carson63000

1

Tôi muốn nói rằng bạn sẽ ổn thôi.

Hầu hết người dùng sẽ đủ sáng để không lưu mật khẩu của họ trên thiết bị đầu cuối công cộng và mật khẩu sẽ được lưu trữ trên mỗi hồ sơ. Hãy nhớ rằng họ có thể dễ dàng viết nó trên một tờ giấy dính hoặc sử dụng mật khẩu yếu.

Nếu trang đăng nhập không được mã hóa qua SSL, kẻ tấn công sẽ không thể đánh hơi được mật khẩu đó khi nó di chuyển qua mạng. Mặc dù vậy, việc băm mật khẩu trong cơ sở dữ liệu rất tốt, điều đó sẽ ngăn kẻ tấn công tiềm năng nhìn thấy mật khẩu của mọi người (họ có thể sử dụng địa chỉ email để cố gắng đăng nhập vào các trang web khác mà người dùng có thể truy cập.)

Nếu bạn vẫn muốn, có nhiều cách để vô hiệu hóa hành vi của trình duyệt như Chad đã chỉ ra. Tôi chỉ thấy điều này trên trang web của ngân hàng và hệ thống Live của Microsoft.


Bài đăng tuyệt vời, tôi đã quên thêm mặc dù tên người dùng sẽ không phải là địa chỉ email, tuy nhiên người dùng sẽ có một địa chỉ email được lưu trữ trong hệ thống. Thật buồn cười khi bạn đề cập đến điều này bởi vì ngay cả các trang web phổ biến như Facebook cũng dễ bị đánh hơi gói cho các địa chỉ email và mật khẩu.
maple_shaft

Tôi cũng muốn nói thêm rằng tôi không chỉ ra các lỗi bảo mật trong Facebook là "cái cớ" nhất thiết cho một mô hình bảo mật kém trong ứng dụng của tôi. Chỉ vì mẹ của Joey cho phép anh ấy xem những bộ phim được xếp hạng R không làm cho đúng :)
maple_shaft

1

Tại một thời điểm nhất định, bạn không thể (và không bắt buộc về mặt pháp lý) để bảo vệ người dùng khỏi chính họ. Chức năng "Ghi nhớ mật khẩu" có thể có rủi ro, nhưng đó là rủi ro do người dùng giả định. Tương tự, nếu người dùng quyết định sử dụng lại mật khẩu của họ cho nhiều dịch vụ, họ cũng cho rằng đó là rủi ro. Bạn cũng không được yêu cầu cảnh báo họ không ghi lại mật khẩu của họ trên một tờ giấy dính và dán nó vào màn hình của họ, mặc dù người dùng cũng thường làm điều này.

Đó là, cho đến khi ai đó khởi kiện thành công và thay đổi các quy tắc. Xem thêm: "Cảnh báo: nội dung có thể nóng".


0

Tôi không nghĩ rằng bạn có thể kiểm soát một cách đáng tin cậy cho dù trình duyệt có nhớ mật khẩu hay không. Nó chỉ đơn giản là ra khỏi tay của bạn cho dù trình duyệt làm điều đó hay không. Nó cũng không hẳn là một rủi ro bảo mật rất lớn cho bạn . Bạn nên luôn luôn cho rằng các cuộc tấn công có thể được thực hiện từ thông tin đăng nhập hợp lệ. Đừng cho rằng vì ai đó có người dùng đăng nhập / vượt qua hợp lệ mà họ sẽ không trở nên không tốt. Rốt cuộc, có rất nhiều cách mật khẩu có thể rơi vào tay kẻ xấu.

Tôi đoán những gì bạn có thể làm là chọn ngẫu nhiên tên trường trong biểu mẫu đăng nhập của bạn mỗi lần. Thay vì <input name="username"sử dụng một cái gì đó như <input name="user658667587". Điều đó sẽ làm cho tên người dùng được lưu trong bộ nhớ cache khá vô dụng. Nhưng tôi không biết liệu chi phí có đáng không. Chưa kể inconveniencing người dùng arent trên máy công cộng.

Nếu bạn đang ở trong một tình huống cực kỳ nhạy cảm về bảo mật (ngân hàng, đầu tư), bạn có thể chỉ cần hỏi mọi người trong quá trình đăng nhập xem đó có phải là máy công cộng không. Bạn cũng có thể lưu trữ các địa chỉ IP đã biết khi mọi người đăng nhập và nếu họ đăng nhập từ một vị trí khác yêu cầu số pin không thể đánh máy (ví dụ: nhấp vào hình ảnh) ngoài người dùng / thẻ thông thường. Ngân hàng của tôi làm một cái gì đó giống như điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.