Câu hỏi Hướng dẫn dứt khoát để xác thực trang web dựa trên biểu mẫu [đã đóng]


Xác thực dựa trên mẫu cho các trang web

Chúng tôi tin rằng Stack Overflow không chỉ là tài nguyên cho các câu hỏi kỹ thuật rất cụ thể mà còn hướng dẫn chung về cách giải quyết các biến thể về các vấn đề phổ biến. "Xác thực dựa trên biểu mẫu cho các trang web" phải là một chủ đề tốt cho một thử nghiệm như vậy.

Nó nên bao gồm các chủ đề như:

  • Cách đăng nhập
  • Cách đăng xuất
  • Cách duy trì trạng thái đăng nhập
  • Quản lý cookie (bao gồm cài đặt được đề xuất)
  • Mã hóa SSL / HTTPS
  • Cách lưu trữ mật khẩu
  • Sử dụng câu hỏi bí mật
  • Đã quên chức năng tên người dùng / mật khẩu
  • Sử dụng nonces để ngăn chặn -trình yêu cầu qua nhiều trang
  • OpenID
  • Hộp kiểm "Nhớ thông tin đăng nhập của tôi"
  • Tự động hoàn thành trình duyệt tên người dùng và mật khẩu
  • URL bí mật (công khai URL được bảo vệ bởi thông báo)
  • Kiểm tra độ mạnh mật khẩu
  • Xác nhận E-mail
  • và nhiều hơn nữa về  xác thực dựa trên biểu mẫu...

Nó không nên bao gồm những thứ như:

  • Vai trò và ủy quyền
  • Xác thực cơ sở HTTP

Hãy giúp chúng tôi bằng cách:

  1. Đề xuất chủ đề phụ
  2. Gửi bài viết hay về chủ đề này
  3. Chỉnh sửa câu trả lời chính thức

5002


gốc


Tại sao loại trừ xác thực cơ bản HTTP? Nó có thể hoạt động dưới dạng HTML thông qua Ajax: peej.co.uk/articles/http-auth-with-html-forms.html - system PAUSE
Auth HTTP cơ bản có tài sản của (tương đối) khó khăn để làm cho một trình duyệt quên. Nó cũng không an toàn khủng khiếp nếu bạn không sử dụng nó với SSL để bảo đảm kết nối (ví dụ: HTTPS). - Donal Fellows
Tôi nghĩ sẽ đáng nói về các phiên (bao gồm cả các định dạng và tấn công) các cookie (các cờ an toàn và http chỉ) dựa trên SSO dựa trên HTTP - symcbean
Siêu hữu ích HttpOnly cookie cờ, ngăn chặn trộm cắp cookie dựa trên JavaScript (một tập con của các cuộc tấn công XSS), cũng nên được đề cập ở đâu đó. - Alan H.
Wow. Các câu trả lời dài dòng, hàng tá upvotes cho một số người trong số họ, nhưng không ai đề cập đến lỗi thường gặp khi cung cấp biểu mẫu đăng nhập qua HTTP. Tôi thậm chí còn tranh luận với những người đã nói "nhưng nó gửi tới https: // ..." và chỉ có những cái nhìn trống khi tôi hỏi họ có chắc chắn một kẻ tấn công không viết lại trang không được mã hóa mà biểu mẫu đã được phục vụ . - dzuelke


Các câu trả lời:


PHẦN I: Cách đăng nhập

Giả sử bạn đã biết cách xây dựng biểu mẫu HTML đăng nhập + mật khẩu POST các giá trị cho một tập lệnh ở phía máy chủ để xác thực. Các phần bên dưới sẽ xử lý các mẫu cho auth thiết thực âm thanh và cách tránh các cạm bẫy bảo mật phổ biến nhất.

Để HTTPS hay không HTTPS?

Trừ khi kết nối đã được bảo mật (có nghĩa là, được truyền qua HTTPS bằng SSL / TLS), các giá trị biểu mẫu đăng nhập của bạn sẽ được gửi đi rõ ràng, cho phép mọi người nghe trộm trên đường giữa trình duyệt và máy chủ web sẽ có thể đọc thông tin đăng nhập khi họ vượt qua xuyên qua. Đây là loại wiretapping được thực hiện thường xuyên bởi các chính phủ, nhưng nói chung chúng tôi sẽ không giải quyết dây 'sở hữu' khác hơn để nói điều này: Nếu bạn đang bảo vệ bất cứ điều gì quan trọng, sử dụng HTTPS.

Về bản chất, chỉ thực tế cách để bảo vệ chống lại việc lén lút / gói sniffing trong khi đăng nhập là bằng cách sử dụng HTTPS hoặc một chương trình mã hóa dựa trên chứng chỉ khác (ví dụ, TLS) hoặc chương trình thử thách phản hồi đã được kiểm chứng và thử nghiệm (ví dụ: Diffie-Hellmandựa trên SRP). Bất kỳ phương pháp nào khác có thể dễ dàng bị phá vỡ bởi kẻ tấn công nghe lén.

Tất nhiên, nếu bạn sẵn sàng nhận một chút không thực tế, bạn cũng có thể sử dụng một số biểu mẫu xác thực hai yếu tố (ví dụ: ứng dụng Google Authenticator, sách mã 'phong cách chiến tranh lạnh' hoặc khóa máy phát điện RSA). Nếu được áp dụng chính xác, điều này có thể hoạt động ngay cả với một kết nối không an toàn, nhưng thật khó để tưởng tượng rằng một dev sẽ sẵn sàng thực hiện xác thực hai yếu tố nhưng không phải SSL.

(Không) Mã hóa / băm JavaScript của riêng bạn

Với chi phí không đồng bộ và khó khăn về kỹ thuật khi thiết lập chứng chỉ SSL trên trang web của bạn, một số nhà phát triển bị cám dỗ để cuộn các chương trình băm hoặc mã hóa trong trình duyệt của riêng mình để tránh việc đăng nhập bằng văn bản không an toàn.

Trong khi đây là một tư tưởng cao quý, nó cơ bản là vô dụng (và có thể là một lỗ hổng bảo mậttrừ khi nó được kết hợp với một trong những điều trên - có nghĩa là, hoặc bảo mật đường dây với mã hóa mạnh hoặc sử dụng cơ chế phản hồi thử thách và thử nghiệm (nếu bạn không biết đó là gì, chỉ cần biết rằng nó là một khó khăn nhất để chứng minh, khó khăn nhất để thiết kế và khó khăn nhất để triển khai các khái niệm về bảo mật kỹ thuật số).

Trong khi đúng là băm mật khẩu có thể hiệu quả chống lại tiết lộ mật khẩunó có thể tấn công replay, tấn công Man-In-The-Middle / hijackings (nếu kẻ tấn công có thể tiêm một vài byte vào trang HTML không an toàn của bạn trước khi nó đến trình duyệt của bạn, họ có thể đơn giản nhận xét băm trong JavaScript), hoặc tấn công brute-force (vì bạn đang giao cho kẻ tấn công cả tên người dùng, muối và mật khẩu băm).

CAPTCHAS chống lại loài người

CAPTCHA có nghĩa là ngăn chặn một danh mục tấn công cụ thể: từ điển tự động / thử nghiệm bạo lực và lỗi không có toán tử con người. Không có nghi ngờ rằng đây là một mối đe dọa thực sự, tuy nhiên có những cách để đối phó với nó liền mạch mà không yêu cầu một CAPTCHA, cụ thể được thiết kế đúng cách đăng nhập quản lý các chương trình điều tiết - chúng tôi sẽ thảo luận về những điều sau này.

Biết rằng việc triển khai CAPTCHA không được tạo ra như nhau; chúng thường không thể giải quyết được con người, hầu hết trong số chúng thực sự không hiệu quả đối với các bot, tất cả chúng đều không hiệu quả so với lao động giá rẻ thế giới thứ ba (theo OWASP, tỷ lệ hiện tại của cửa hàng bán thuốc là $ 12/500 thử nghiệm) và một số triển khai có thể là bất hợp pháp về kỹ thuật ở một số quốc gia (xem OWASP xác thực Cheat Sheet). Nếu bạn phải sử dụng CAPTCHA, hãy sử dụng Google reCAPTCHA, vì nó là OCR-cứng theo định nghĩa (vì nó sử dụng các bản quét sách đã phân loại sai) và cố gắng rất thân thiện với người dùng.

Cá nhân, tôi có xu hướng tìm thấy CAPTCHAS gây phiền nhiễu và chỉ sử dụng chúng như một phương sách cuối cùng khi người dùng không đăng nhập được một số lần và sự chậm trễ điều chỉnh được tối đa. Điều này sẽ xảy ra hiếm khi đủ để được chấp nhận, và nó tăng cường hệ thống như một toàn thể.

Lưu trữ mật khẩu / Xác minh thông tin đăng nhập

Điều này cuối cùng có thể là kiến ​​thức phổ biến sau tất cả các lỗ hổng được công bố công khai và rò rỉ dữ liệu người dùng mà chúng ta đã thấy trong những năm gần đây, nhưng phải nói: Không lưu trữ mật khẩu trong văn bản rõ ràng của bạn. Cơ sở dữ liệu người dùng thường xuyên bị tấn công, bị rò rỉ hoặc lượm lặt thông qua SQL injection, và nếu bạn đang lưu trữ các mật khẩu thô, thô tục, tức là trò chơi ngay lập tức cho bảo mật đăng nhập của bạn.

Vì vậy, nếu bạn không thể lưu trữ mật khẩu, làm thế nào để bạn kiểm tra xem kết hợp đăng nhập + mật khẩu được đăng từ biểu mẫu đăng nhập có đúng không? Câu trả lời là băm bằng cách sử dụng hàm dẫn xuất khóa. Bất cứ khi nào một người dùng mới được tạo hoặc mật khẩu được thay đổi, bạn lấy mật khẩu và chạy nó thông qua một KDF, chẳng hạn như Argon2, bcrypt, scrypt hoặc PBKDF2, chuyển mật khẩu cleartext ("correcthorsebatterystaple") thành một chuỗi dài, ngẫu nhiên , đó là rất nhiều an toàn hơn để lưu trữ trong cơ sở dữ liệu của bạn. Để xác minh đăng nhập, bạn chạy cùng hàm băm trên mật khẩu đã nhập, lần này chuyển qua muối và so sánh chuỗi băm kết quả với giá trị được lưu trữ trong cơ sở dữ liệu của bạn. Argon2, bcrypt và scrypt lưu trữ muối bằng hàm băm. Kiểm tra này bài báo trên sec.stackexchange để biết thêm thông tin chi tiết.

Lý do muối được sử dụng là bởi vì băm trong chính nó là không đủ - bạn sẽ muốn thêm một cái gọi là 'muối' để bảo vệ băm chống lại cầu vồng bảng. Một muối có hiệu quả ngăn chặn hai mật khẩu khớp chính xác với việc được lưu trữ dưới dạng giá trị băm giống nhau, ngăn chặn toàn bộ cơ sở dữ liệu được quét trong một lần chạy nếu kẻ tấn công đang thực hiện một cuộc tấn công đoán mật khẩu.

Băm mật mã không nên được sử dụng để lưu trữ mật khẩu vì mật khẩu người dùng chọn không đủ mạnh (tức là không chứa đủ entropy) và một cuộc tấn công đoán mật khẩu có thể được hoàn thành trong một thời gian tương đối ngắn bởi kẻ tấn công có quyền truy cập vào băm. Đây là lý do tại sao một KDF được sử dụng - những "kéo dài chìa khóa" có nghĩa là mỗi mật khẩu đoán một kẻ tấn công liên quan đến việc lặp lại thuật toán băm nhiều lần, ví dụ 10.000 lần, làm cho mật khẩu của kẻ tấn công đoán chậm hơn 10.000 lần.

Dữ liệu phiên - "Bạn đã đăng nhập bằng Spiderman69"

Khi máy chủ đã xác minh thông tin đăng nhập và mật khẩu đối với cơ sở dữ liệu người dùng của bạn và tìm thấy kết quả phù hợp, hệ thống cần một cách để nhớ rằng trình duyệt đã được xác thực. Thực tế này chỉ nên được lưu trữ phía máy chủ trong dữ liệu phiên.

Nếu bạn không quen với dữ liệu phiên, dưới đây là cách hoạt động: Một chuỗi được tạo ngẫu nhiên được lưu trữ trong cookie hết hạn và được sử dụng để tham chiếu bộ sưu tập dữ liệu - dữ liệu phiên - được lưu trữ trên máy chủ. Nếu bạn đang sử dụng một khung MVC, điều này chắc chắn đã được xử lý rồi.

Nếu có thể, hãy chắc chắn rằng cookie phiên có cờ an toàn và chỉ HTTP được đặt khi được gửi đến trình duyệt. Cờ httponly cung cấp một số bảo vệ chống lại cookie được đọc bởi một cuộc tấn công XSS. Cờ an toàn đảm bảo rằng cookie chỉ được gửi lại qua HTTPS và do đó bảo vệ chống lại các cuộc tấn công đánh hơi mạng. Giá trị của cookie không thể dự đoán được. Khi một cookie tham chiếu một phiên không tồn tại được trình bày, giá trị của nó sẽ được thay thế ngay lập tức để ngăn chặn phiên cố định.

PHẦN II: Cách đăng nhập lại - Hộp kiểm "Nhớ tôi"

Cookie đăng nhập liên tục (chức năng "nhớ tôi") là vùng nguy hiểm; một mặt, chúng hoàn toàn an toàn như thông tin đăng nhập thông thường khi người dùng hiểu cách xử lý chúng; và mặt khác, họ là một rủi ro bảo mật rất lớn trong tay những người dùng bất cẩn, những người có thể sử dụng chúng trên máy tính công cộng và quên đăng xuất và những người không biết cookie trình duyệt là gì hoặc cách xóa chúng.

Cá nhân, tôi thích đăng nhập liên tục cho các trang web tôi truy cập thường xuyên, nhưng tôi biết cách xử lý chúng một cách an toàn. Nếu bạn tích cực rằng người dùng của bạn biết như vậy, bạn có thể sử dụng thông tin đăng nhập liên tục với lương tâm trong sạch. Nếu không - tốt, sau đó bạn có thể đăng ký với triết lý mà người dùng bất cẩn với thông tin đăng nhập của họ mang nó khi họ bị tấn công. Nó không giống như chúng ta đi đến nhà của người dùng của chúng tôi và xé bỏ tất cả những ghi chú Post-It facepalm-inducing với mật khẩu mà họ đã xếp hàng trên các cạnh của màn hình của họ, một trong hai.

Tất nhiên, một số hệ thống không thể đủ khả năng để có bất kì tài khoản bị tấn công; cho các hệ thống như vậy, không có cách nào bạn có thể biện minh cho việc đăng nhập liên tục.

Nếu bạn quyết định triển khai cookie đăng nhập liên tục, đây là cách bạn thực hiện:

  1. Đầu tiên, dành chút thời gian để đọc Bài viết của Paragon Initiative Về chủ đề này. Bạn sẽ cần phải có được một loạt các yếu tố đúng và bài viết thực hiện một công việc tuyệt vời để giải thích từng yếu tố.

  2. Và chỉ để nhắc lại một trong những cạm bẫy phổ biến nhất, KHÔNG CẦN CỬA COOKIE ĐĂNG NHẬP (TOKEN) TRONG BẢNG CĂN CỨ CỦA BẠN, CHỈ CÓ MẶT TIỀN! Mã thông báo đăng nhập là Mật khẩu Tương đương, vì vậy nếu kẻ tấn công có bàn tay của họ trên cơ sở dữ liệu của bạn, họ có thể sử dụng mã thông báo để đăng nhập vào bất kỳ tài khoản nào, giống như chúng là kết hợp mật khẩu đăng nhập rõ ràng. Do đó, sử dụng băm (theo https://security.stackexchange.com/a/63438/5002 một băm yếu sẽ làm tốt cho mục đích này) khi lưu trữ thẻ đăng nhập liên tục.

PHẦN III: Sử dụng câu hỏi bí mật

Không triển khai 'câu hỏi bí mật'. Tính năng 'câu hỏi bí mật' là một mẫu chống bảo mật. Đọc bài báo từ liên kết số 4 từ danh sách PHẢI đọc. Bạn có thể hỏi Sarah Palin về cái đó, sau khi Yahoo! tài khoản email đã bị hack trong một chiến dịch tranh cử tổng thống trước đó bởi vì câu trả lời cho câu hỏi bảo mật của cô ấy là ... "Trường trung học Wasilla"!

Ngay cả với các câu hỏi do người dùng chỉ định, rất có thể hầu hết người dùng sẽ chọn:

  • Câu hỏi bí mật 'tiêu chuẩn' như tên thời con gái của mẹ hoặc thú cưng yêu thích

  • Một mẩu thông tin đơn giản mà mọi người có thể nâng lên từ blog của họ, hồ sơ LinkedIn hoặc tương tự

  • Bất kỳ câu hỏi nào dễ trả lời hơn là đoán mật khẩu của họ. Mà, đối với bất kỳ mật khẩu phong nha, là mọi câu hỏi bạn có thể tưởng tượng

Tóm lại, các câu hỏi bảo mật vốn không an toàn trong hầu như tất cả các hình thức và biến thể của chúng, và không nên được sử dụng trong một chương trình xác thực vì bất kỳ lý do gì.

Lý do thực sự tại sao các câu hỏi bảo mật thậm chí tồn tại trong tự nhiên là chúng thuận tiện tiết kiệm chi phí của một vài cuộc gọi hỗ trợ từ những người dùng không thể truy cập email của họ để nhận được mã kích hoạt lại. Điều này tại các chi phí của an ninh và danh tiếng của Sarah Palin. Worth nó? Chắc là không.

PHẦN IV: Quên mật khẩu

Tôi đã đề cập lý do tại sao bạn nên không bao giờ sử dụng câu hỏi bảo mậtđể xử lý quên / mất mật khẩu người dùng; nó cũng đi mà không nói rằng bạn sẽ không bao giờ e-mail người dùng mật khẩu thực tế của họ. Có ít nhất hai cạm bẫy quá phổ biến để tránh trong trường này:

  1. Đừng cài lại mật khẩu bị quên cho mật khẩu mạnh được tạo tự động - những mật khẩu này rất khó nhớ, điều đó có nghĩa là người dùng phải thay đổi hoặc viết nó xuống - nói, trên một màu vàng tươi sáng ở cạnh màn hình của họ. Thay vì đặt mật khẩu mới, chỉ cần cho phép người dùng chọn mật khẩu mới ngay lập tức - đó là điều họ muốn làm. (Ngoại lệ cho điều này có thể là nếu người dùng đang sử dụng chung trình quản lý mật khẩu để lưu trữ / quản lý mật khẩu thường không thể nhớ mà không cần viết xuống).

  2. Luôn băm mã mật khẩu bị mất / mã thông báo trong cơ sở dữ liệu. LẦN NỮA, mã này là một ví dụ khác của Mật khẩu Tương đương, vì vậy nó PHẢI được băm trong trường hợp kẻ tấn công có bàn tay của họ trên cơ sở dữ liệu của bạn. Khi mã mật khẩu bị mất được yêu cầu, hãy gửi mã văn bản thô tới địa chỉ email của người dùng, sau đó băm nó, lưu băm trong cơ sở dữ liệu của bạn - và vứt bỏ bản gốc. Giống như mật khẩu hoặc mã thông báo đăng nhập liên tục.

Lưu ý cuối cùng: luôn đảm bảo giao diện của bạn để nhập 'mã mật khẩu bị mất' ít nhất là an toàn như biểu mẫu đăng nhập của bạn, hoặc kẻ tấn công sẽ sử dụng quyền này để truy cập thay vào đó. Đảm bảo bạn tạo 'mã mật khẩu bị mất' rất dài (ví dụ 16 ký tự chữ và số nhạy cảm) là một khởi đầu tốt, nhưng hãy cân nhắc thêm lược đồ điều chỉnh tương tự mà bạn thực hiện cho biểu mẫu đăng nhập.

PHẦN V: Kiểm tra độ mạnh của mật khẩu

Trước tiên, bạn sẽ muốn đọc bài viết nhỏ này để kiểm tra thực tế: 500 mật khẩu phổ biến nhất

Được rồi, vì vậy có thể danh sách không phải là kinh điển danh sách các mật khẩu phổ biến nhất trên bất kì hệ thống bất cứ nơi nào, nhưng đó là một dấu hiệu tốt về việc người nghèo sẽ chọn mật khẩu của họ như thế nào khi không có chính sách thực thi nào. Ngoài ra, danh sách trông đáng sợ gần nhà khi bạn so sánh nó với các phân tích công khai có sẵn của mật khẩu bị đánh cắp gần đây.

Vì vậy: Không yêu cầu độ mạnh mật khẩu tối thiểu, 2% người dùng sử dụng một trong 20 mật khẩu phổ biến nhất. Có nghĩa là: nếu kẻ tấn công chỉ có 20 lần thử, 1 trong 50 tài khoản trên trang web của bạn sẽ bị crack.

Việc ngăn chặn điều này đòi hỏi phải tính toán entropy của mật khẩu và sau đó áp dụng một ngưỡng. Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) Ấn phẩm đặc biệt 800-63 có một tập hợp các đề xuất rất tốt. Điều đó, khi kết hợp với phân tích bố cục từ điển và bàn phím (ví dụ: 'qwertyuiop' là mật khẩu không hợp lệ), có thể từ chối 99% tất cả mật khẩu được chọn kém ở mức 18 bit entropy. Chỉ cần tính toán độ mạnh của mật khẩu và hiển thị đồng hồ đo cường độ hình ảnh cho người dùng là tốt, nhưng không đủ. Trừ khi nó được thực thi, rất nhiều người dùng rất có thể sẽ bỏ qua nó.

Và để làm mới sự thân thiện với người dùng của mật khẩu entropy cao, Randall Munroe's Cường độ của mật khẩu xkcd là rất khuyến khích.

PHẦN VI: Nhiều hơn - Hoặc: Ngăn chặn các nỗ lực đăng nhập nhanh chóng

Đầu tiên, hãy xem các con số: Tốc độ khôi phục mật khẩu - Mật khẩu của bạn sẽ tồn tại bao lâu

Nếu bạn không có thời gian để xem qua các bảng trong liên kết đó, đây là danh sách của chúng:

  1. Phải mất hầu như không có thời gian để crack một mật khẩu yếu, ngay cả khi bạn đang nứt nó với bàn tính

  2. Phải mất hầu như không có thời gian để crack mật khẩu gồm 9 ký tự chữ và số, nếu nó là trường hợp không nhạy cảm

  3. Phải mất hầu như không có thời gian để crack một mật khẩu phức tạp, ký hiệu và chữ cái và số, mật khẩu trên và chữ thường, nếu nó là dài hơn 8 ký tự (máy tính để bàn có thể tìm kiếm toàn bộ không gian phím tối đa 7 ký tự trong vài ngày hoặc thậm chí hàng giờ)

  4. Tuy nhiên, nó sẽ mất một lượng thời gian vô hạn để crack ngay cả mật khẩu 6 ký tự, nếu bạn bị giới hạn trong một lần thử mỗi giây!

Vậy chúng ta có thể học được gì từ những con số này? Vâng, rất nhiều, nhưng chúng tôi có thể tập trung vào phần quan trọng nhất: thực tế là ngăn chặn số lượng lớn các nỗ lực đăng nhập liên tiếp nhanh chóng (ví dụ: lực lượng vũ phu tấn công) thực sự không phải là khó khăn. Nhưng ngăn chặn nó đúng không phải là dễ dàng như nó có vẻ.

Nói chung, bạn có ba lựa chọn có hiệu quả chống lại các cuộc tấn công brute-force (và các cuộc tấn công từ điển, nhưng vì bạn đã sử dụng chính sách mật khẩu mạnh nên chúng không phải là vấn đề):

  • Trình bày một CAPTCHA sau N nỗ lực thất bại (khó chịu như địa ngục và thường không hiệu quả - nhưng tôi đang lặp lại bản thân mình ở đây)

  • Khóa tài khoản và yêu cầu xác minh email sau N lần thử không thành công (đây là DoS tấn công chờ đợi để xảy ra)

  • Và cuối cùng, đăng nhập throttling: có nghĩa là, đặt thời gian trễ giữa các lần thử sau N lần thử không thành công (có, các cuộc tấn công DoS vẫn có thể thực hiện được, nhưng ít nhất thì chúng ít có khả năng và phức tạp hơn nhiều để kéo ra).

Phương pháp hay nhất # 1: Thời gian trễ ngắn tăng lên với số lần thử không thành công, như:

  • 1 lần thử không thành công = không chậm trễ
  • 2 lần thử thất bại = 2 giây chậm trễ
  • 3 lần thử thất bại = 4 giây chậm trễ
  • 4 lần thử thất bại = 8 giây chậm trễ
  • 5 lần thử thất bại = 16 giây chậm trễ
  • v.v.

DoS tấn công lược đồ này sẽ rất không thực tế, vì thời gian khóa kết quả là lớn hơn một chút so với tổng thời gian khóa trước đó.

Để làm rõ: Sự chậm trễ là không phải một sự chậm trễ trước khi trả lời phản hồi cho trình duyệt. Nó giống như một khoảng thời gian chờ hoặc thời gian chịu lửa trong đó các lần đăng nhập vào một tài khoản cụ thể hoặc từ một địa chỉ IP cụ thể sẽ không được chấp nhận hoặc đánh giá chút nào. Tức là, thông tin xác thực chính xác sẽ không trả lại trong thông tin đăng nhập thành công và thông tin đăng nhập không chính xác sẽ không kích hoạt tăng chậm trễ.

Phương pháp hay nhất # 2: Độ trễ thời gian trung bình có hiệu lực sau N lần thử không thành công, như:

  • 1-4 lần thử không thành công = không chậm trễ
  • 5 lần thử thất bại = chậm trễ 15-30 phút

DoS tấn công kế hoạch này sẽ khá không thực tế, nhưng chắc chắn có thể thực hiện được. Ngoài ra, nó có thể có liên quan để lưu ý rằng một sự chậm trễ dài như vậy có thể rất khó chịu cho một người dùng hợp pháp. Người dùng quên sẽ không thích bạn.

Phương pháp hay nhất # 3: Kết hợp hai phương pháp tiếp cận - hoặc là một khoảng thời gian ngắn cố định có hiệu lực sau N lần thử không thành công, như:

  • 1-4 lần thử không thành công = không chậm trễ
  • Hơn 5 lần thử không thành công = 20 giây chậm trễ

Hoặc, độ trễ tăng lên với giới hạn trên cố định, như:

  • 1 lần thử thất bại = 5 giây chậm trễ
  • 2 lần thử thất bại = 15 giây chậm trễ
  • 3+ lần thử thất bại = 45 giây chậm trễ

Đề án cuối cùng này được lấy từ các đề xuất thực hành tốt nhất của OWASP (liên kết 1 từ danh sách PHẢI-ĐỌC), và nên được xem là thực hành tốt nhất, ngay cả khi nó được thừa nhận ở phía hạn chế.

Tuy nhiên, theo quy tắc chung, tôi sẽ nói: chính sách mật khẩu của bạn càng mạnh thì bạn càng ít phải gây lỗi cho người dùng bị chậm trễ. Nếu bạn yêu cầu mạnh mẽ (chữ và số nhạy cảm chữ hoa + số và ký hiệu bắt buộc) 9+ mật khẩu ký tự, bạn có thể cung cấp cho người dùng 2-4 lần thử mật khẩu không bị trì hoãn trước khi kích hoạt điều chỉnh.

DoS tấn công lược đồ điều tiết đăng nhập cuối cùng này sẽ là rất không thực tế. Và như là một liên lạc cuối cùng, luôn luôn cho phép đăng nhập liên tục (cookie) (và / hoặc một hình thức đăng nhập CAPTCHA xác minh) để đi qua, vì vậy người dùng hợp pháp thậm chí sẽ không bị trì hoãn trong khi cuộc tấn công đang diễn ra. Bằng cách đó, cuộc tấn công DoS rất không thực tế trở thành vô cùng tấn công không thực tế.

Ngoài ra, nó có ý nghĩa để làm điều chỉnh tích cực hơn trên tài khoản quản trị, vì đó là những điểm nhập hấp dẫn nhất

PHẦN VII: Tấn công Brute Force phân tán

Cũng giống như một kẻ tấn công tiên tiến, sang trọng hơn sẽ cố gắng phá vỡ việc điều tiết đăng nhập bằng cách 'lan truyền các hoạt động của họ':

  • Phân phối các nỗ lực trên botnet để ngăn chặn gắn cờ địa chỉ IP

  • Thay vì chọn một người dùng và thử 50.000 mật khẩu phổ biến nhất (mà họ không thể, vì điều chỉnh của chúng tôi), họ sẽ chọn mật khẩu phổ biến nhất và dùng thử 50.000 người dùng thay thế. Bằng cách đó, không chỉ họ có được các biện pháp tối đa như CAPTCHA và điều chỉnh đăng nhập, cơ hội thành công của họ cũng tăng lên, vì mật khẩu phổ biến nhất số 1 có nhiều khả năng hơn số 49.995

  • Giãn cách các yêu cầu đăng nhập cho mỗi tài khoản người dùng, nói cách nhau 30 giây, để lẻn theo radar

Ở đây, thực hành tốt nhất sẽ là ghi nhật ký số lần đăng nhập không thành công, toàn hệ thốngvà sử dụng tần suất đăng nhập không hợp lệ của trang web làm cơ sở cho giới hạn trên mà bạn áp dụng cho tất cả người dùng.

Quá trừu tượng? Hãy để tôi nói lại:

Giả sử trang web của bạn có trung bình 120 đăng nhập không hợp lệ mỗi ngày trong 3 tháng qua. Sử dụng (trung bình đang chạy), hệ thống của bạn có thể đặt giới hạn toàn cầu thành 3 lần - nghĩa là. 360 lần thử không thành công trong khoảng thời gian 24 giờ. Sau đó, nếu tổng số lần thử không thành công trên tất cả các tài khoản vượt quá con số đó trong vòng một ngày (hoặc thậm chí tốt hơn, theo dõi tốc độ tăng tốc và kích hoạt trên ngưỡng được tính toán), nó sẽ kích hoạt điều chỉnh đăng nhập toàn hệ thống - nghĩa là sự chậm trễ ngắn cho TẤT CẢ người dùng (tuy nhiên, ngoại trừ các thông tin đăng nhập cookie và / hoặc đăng nhập CAPTCHA).

Tôi cũng đã đăng câu hỏi biết thêm chi tiết và một cuộc thảo luận thực sự tốt về cách tránh pitfals phức tạp trong việc chống lại các cuộc tấn công bạo lực

PHẦN VIII: Nhà cung cấp xác thực và xác thực hai yếu tố

Thông tin đăng nhập có thể bị xâm phạm, dù bằng cách khai thác, mật khẩu được ghi lại và bị mất, máy tính xách tay có khóa bị đánh cắp hoặc người dùng đăng nhập vào các trang web lừa đảo. Thông tin đăng nhập có thể được bảo vệ thêm bằng xác thực hai yếu tố, sử dụng các yếu tố ngoài băng như mã sử dụng một lần nhận được từ cuộc gọi điện thoại, tin nhắn SMS, ứng dụng hoặc dongle. Một số nhà cung cấp cung cấp dịch vụ xác thực hai yếu tố.

Việc xác thực có thể được ủy quyền hoàn toàn cho dịch vụ đăng nhập một lần, trong đó một nhà cung cấp khác xử lý việc thu thập thông tin đăng nhập. Điều này đẩy vấn đề đến một bên thứ ba đáng tin cậy. Cả Google và Twitter đều cung cấp các dịch vụ SSO dựa trên các tiêu chuẩn, trong khi Facebook cung cấp một giải pháp độc quyền tương tự.

NHỮNG LIÊN KẾT PHẢI ĐỌC VỀ Xác thực Web

  1. Hướng dẫn OWASP để xác thực / OWASP xác thực Cheat Sheet
  2. Những điều nên và không nên xác thực của khách hàng trên trang web (tài liệu nghiên cứu MIT rất dễ đọc)
  3. Wikipedia: Cookie HTTP
  4. Câu hỏi kiến ​​thức cá nhân để xác thực dự phòng: Câu hỏi bảo mật trong kỷ nguyên của Facebook (tài liệu nghiên cứu Berkeley rất dễ đọc)

3498



Vâng, tôi không thực sự đồng ý với phần Captcha, có Captchas là gây phiền nhiễu và họ có thể bị hỏng (trừ recaptcha nhưng điều này là hầu như không thể giải quyết của con người!) Nhưng điều này là chính xác như nói không sử dụng một bộ lọc thư rác vì nó có ít hơn 0,1% phủ định sai .. trang web này sử dụng Captchas, chúng không hoàn hảo nhưng chúng đã cắt giảm đáng kể lượng spam và đơn giản là không có lựa chọn thay thế tốt cho chúng - Waleed Eissa
@ Jeff: Tôi rất tiếc khi biết rằng bạn có vấn đề với câu trả lời của tôi. Tôi không biết có một cuộc tranh luận về Meta về câu trả lời này, tôi sẽ vui lòng tự mình chỉnh sửa nếu bạn hỏi tôi. Và xóa bài đăng của tôi vừa xóa 1200 danh tiếng khỏi tài khoản của tôi, điều này rất đau: ( - Jens Roland
"Sau khi gửi mã xác thực, hệ thống cần một cách để nhớ rằng bạn đã được xác thực - thực tế này chỉ nên được lưu trữ serverside trong dữ liệu phiên. Cookie có thể được sử dụng để tham chiếu dữ liệu phiên". Không hẳn. Bạn có thể (và nên, cho các máy chủ không trạng thái!) Sử dụng một cookie được mã hóa có ký tên. Điều đó là không thể giả mạo, không ràng buộc tài nguyên máy chủ và không cần các phiên cố định hoặc các hành vi khác. - Martin Probst
"một máy tính để bàn có thể tìm kiếm các KEYSPACE ĐẦY ĐỦ lên đến 7 ký tự trong vòng chưa đầy 90 ngày" Một máy tính với một GPU gần đây có thể tìm kiếm đầy đủ 7 char keyspace trong vòng chưa đầy 1 ngày. Một đầu dòng GPU có thể quản lý 1 tỷ băm mỗi giây. golubev.com/hashgpu.htm  Điều này dẫn đến một số kết luận về lưu trữ mật khẩu không được giải quyết trực tiếp. - Frank Farmer
Tôi ngạc nhiên khi bảo vệ CSRF chưa được đề cập ... - Flukey


Điều dứt khoát

Gửi bằng chứng xác thực

Cách duy nhất để gửi thông tin xác thực 100% an toàn là bằng cách sử dụng SSL. Sử dụng JavaScript để băm mật khẩu không an toàn. Cạm bẫy phổ biến cho băm mật khẩu phía máy khách:

  • Nếu kết nối giữa máy khách và máy chủ không được mã hóa, mọi thứ bạn làm là dễ bị tấn công man-in-the-middle. Kẻ tấn công có thể thay thế javascript đến để bẻ khóa hoặc gửi tất cả các thông tin đến máy chủ của họ, họ có thể lắng nghe phản hồi của khách hàng và mạo danh người dùng một cách hoàn hảo, v.v. SSL với các Tổ chức phát hành chứng chỉ tin cậy được thiết kế để ngăn chặn tấn công MitM.
  • Mật khẩu băm nhận bởi máy chủ là kém an toàn nếu bạn không làm thêm, công việc dư thừa trên máy chủ.

Có một phương pháp an toàn khác gọi là SRP, nhưng nó được cấp bằng sáng chế (mặc dù nó là tự do được cấp phép) và có vài triển khai tốt có sẵn.

Lưu trữ mật khẩu

Đừng bao giờ lưu trữ mật khẩu dưới dạng văn bản thô trong cơ sở dữ liệu. Thậm chí nếu bạn không quan tâm đến bảo mật của trang web của riêng bạn. Giả sử rằng một số người dùng của bạn sẽ sử dụng lại mật khẩu của tài khoản ngân hàng trực tuyến của họ. Vì vậy, lưu trữ mật khẩu băm, và vứt bỏ bản gốc. Và đảm bảo mật khẩu không hiển thị trong nhật ký truy cập hoặc nhật ký ứng dụng. OWASP đề nghị sử dụng Argon2 là lựa chọn đầu tiên của bạn cho các ứng dụng mới. Nếu điều này không có sẵn, PBKDF2 hoặc scrypt nên được sử dụng thay thế. Và cuối cùng nếu không có sẵn ở trên, hãy sử dụng bcrypt.

Bản thân phát ban cũng không an toàn. Ví dụ, mật khẩu giống hệt nhau có nghĩa là băm giống hệt nhau - điều này làm cho bảng tra cứu băm là một cách hiệu quả để bẻ nhiều mật khẩu cùng một lúc. Thay vào đó, hãy lưu trữ muối băm. Muối là một chuỗi được nối vào mật khẩu trước khi băm - sử dụng một loại muối khác (ngẫu nhiên) cho mỗi người dùng. Muối là giá trị công khai, vì vậy bạn có thể lưu trữ chúng bằng hàm băm trong cơ sở dữ liệu. Xem đây để biết thêm về điều này.

Điều này có nghĩa là bạn không thể gửi cho người dùng mật khẩu bị quên của họ (vì bạn chỉ có băm). Không đặt lại mật khẩu của người dùng trừ khi bạn đã xác thực người dùng (người dùng phải chứng minh rằng họ có thể đọc email được gửi đến địa chỉ email được lưu trữ (và được xác thực).)

Câu hỏi bảo mật

Câu hỏi bảo mật không an toàn - tránh sử dụng chúng. Tại sao? Bất cứ điều gì một câu hỏi bảo mật, một mật khẩu sẽ tốt hơn. Đọc PHẦN III: Sử dụng câu hỏi bí mật trong @Jens Roland trả lời ở đây trong wiki này.

Cookie phiên

Sau khi người dùng đăng nhập, máy chủ sẽ gửi cho người dùng cookie phiên. Máy chủ có thể truy xuất tên người dùng hoặc id từ cookie, nhưng không ai khác có thể tạo ra một cookie như vậy (các cơ chế giải thích TODO).

Cookie có thể bị tấn công: chúng chỉ an toàn như phần còn lại của máy khách và các thông tin liên lạc khác. Họ có thể được đọc từ đĩa, đánh hơi trong lưu lượng mạng, được nâng lên bởi một cuộc tấn công tập lệnh cross-site, được đánh cắp từ một DNS bị nhiễm độc để khách hàng gửi cookie của họ đến các máy chủ sai. Không gửi cookie liên tục. Cookie sẽ hết hạn vào cuối phiên khách hàng (trình duyệt đóng hoặc rời khỏi miền của bạn).

Nếu bạn muốn tự động nhận người dùng của mình, bạn có thể đặt một cookie liên tục, nhưng nó phải khác biệt với cookie toàn phiên. Bạn có thể đặt cờ bổ sung mà người dùng đã đăng nhập tự động và cần đăng nhập thực sự cho các hoạt động nhạy cảm. Điều này phổ biến với các trang web mua sắm muốn cung cấp cho bạn trải nghiệm mua sắm liền mạch, được cá nhân hóa nhưng vẫn bảo vệ chi tiết tài chính của bạn. Ví dụ: khi bạn quay lại thăm Amazon, họ sẽ hiển thị cho bạn một trang có vẻ như bạn đã đăng nhập nhưng khi bạn đặt hàng (hoặc thay đổi địa chỉ giao hàng, thẻ tín dụng, v.v.), họ sẽ yêu cầu bạn xác nhận mật khẩu của bạn.

Các trang web tài chính như ngân hàng và thẻ tín dụng, mặt khác, chỉ có dữ liệu nhạy cảm và không cho phép tự động đăng nhập hoặc chế độ bảo mật thấp.

Danh sách các tài nguyên bên ngoài


387



Do lỗ hổng MITM gần đây xung quanh chứng chỉ SSL đã ký (blog.startcom.org/?p=145) do đó, một sự kết hợp của SSL và một số loại xác thực phản hồi Challenge (Có những lựa chọn thay thế cho SRP) có lẽ là một giải pháp tốt hơn. - Kevin Loney
rất nhiều thứ này là tình huống. tôi có xu hướng không sử dụng cookie phiên. cookie bị tấn công gần như luôn là lỗi của máy chủ. người đàn ông ở giữa / gói sniffing arent phổ biến - Shawn
Gói BCrypt Nuget: nuget.org/List/Packages/BCrypt - Fabian Vilers
Lưu ý 1 về câu trả lời này: đó là một bản nháp, được chỉnh sửa dưới dạng wiki. Nếu bạn có thể chỉnh sửa điều này, bạn được chào đón. - Peter Mortensen


Đầu tiên, một thông báo mạnh mẽ rằng câu trả lời này không phù hợp nhất với câu hỏi chính xác này. Nó chắc chắn không phải là câu trả lời hàng đầu!

Tôi sẽ tiếp tục và đề cập đến đề xuất của Mozilla BrowserID (hoặc có lẽ chính xác hơn, Giao thức email đã xác minh) theo tinh thần tìm đường nâng cấp để tiếp cận tốt hơn để xác thực trong tương lai.

Tôi sẽ tóm tắt theo cách này:

  1. Mozilla là một tổ chức phi lợi nhuận với giá trị phù hợp tốt với việc tìm ra giải pháp tốt cho vấn đề này.
  2. Thực tế ngày nay là hầu hết các trang web đều sử dụng xác thực dựa trên biểu mẫu
  3. Xác thực dựa trên mẫu có một nhược điểm lớn, điều này làm tăng nguy cơ lừa đảo. Người dùng được yêu cầu nhập thông tin nhạy cảm vào một khu vực được điều khiển bởi một thực thể từ xa, thay vì một khu vực được kiểm soát bởi User Agent (trình duyệt) của họ.
  4. Vì trình duyệt hoàn toàn tin cậy (toàn bộ ý tưởng của Tác nhân người dùng là hành động thay mặt cho Người dùng), họ có thể giúp cải thiện tình trạng này.
  5. Lực lượng chính giữ lại tiến trình ở đây là bế tắc triển khai. Các giải pháp phải được phân tích thành các bước cung cấp một số lợi ích gia tăng cho riêng mình.
  6. Phương pháp phân cấp đơn giản nhất để thể hiện danh tính được xây dựng trong cơ sở hạ tầng internet là tên miền.
  7. Là cấp thứ hai thể hiện danh tính, mỗi miền quản lý tập hợp tài khoản của riêng mình.
  8. Biểu mẫu “tài khoản@miền "ngắn gọn và được hỗ trợ bởi một loạt các giao thức và lược đồ URI. Tất nhiên, số nhận dạng này, được công nhận phổ biến nhất là địa chỉ email.
  9. Nhà cung cấp dịch vụ email đã là những nhà cung cấp nhận dạng chính trực tuyến. Luồng đặt lại mật khẩu hiện tại thường cho phép bạn kiểm soát tài khoản nếu bạn có thể chứng minh rằng bạn kiểm soát địa chỉ email được liên kết của tài khoản đó.
  10. Giao thức email được xác minh đã được đề xuất để cung cấp một phương pháp bảo mật, dựa trên mật mã khóa công khai, để đơn giản hóa quy trình chứng minh miền B mà bạn có tài khoản trên miền A.
  11. Đối với các trình duyệt không hỗ trợ Giao thức email được xác minh (hiện là tất cả trong số chúng), Mozilla cung cấp một shim thực hiện giao thức trong mã JavaScript phía máy khách.
  12. Đối với các dịch vụ email không hỗ trợ Giao thức email được xác minh, giao thức cho phép bên thứ ba hoạt động như một trung gian đáng tin cậy, khẳng định rằng họ đã xác minh quyền sở hữu tài khoản của người dùng. Nó không phải là mong muốn để có một số lượng lớn các bên thứ ba như vậy; khả năng này chỉ nhằm mục đích cho phép một đường dẫn nâng cấp, và nó được ưu tiên hơn nhiều là các dịch vụ email cung cấp các xác nhận này.
  13. Mozilla cung cấp dịch vụ riêng của họ để hoạt động như một bên thứ ba đáng tin cậy. Các nhà cung cấp dịch vụ (có nghĩa là, các bên đang thực hiện) thực hiện Giao thức email đã xác minh có thể chọn tin tưởng các xác nhận của Mozilla hay không. Dịch vụ của Mozilla xác minh quyền sở hữu tài khoản của người dùng bằng cách sử dụng các phương tiện thông thường để gửi email có liên kết xác nhận.
  14. Các nhà cung cấp dịch vụ có thể, tất nhiên, cung cấp giao thức này như là một tùy chọn ngoài bất kỳ phương pháp xác thực nào khác mà họ có thể muốn cung cấp.
  15. Một lợi ích giao diện người dùng lớn được tìm kiếm ở đây là "bộ chọn danh tính". Khi người dùng truy cập vào trang web và chọn xác thực, trình duyệt của họ hiển thị cho họ một số địa chỉ email ("cá nhân", "công việc", "chủ nghĩa chính trị", v.v.) mà họ có thể sử dụng để xác định chính họ cho trang web.
  16. Một lợi ích giao diện người dùng lớn đang được tìm kiếm như một phần của nỗ lực này là giúp trình duyệt biết thêm về phiên của người dùng - những người mà họ đăng nhập như hiện tại, chủ yếu - vì vậy nó có thể hiển thị trong chrome của trình duyệt.
  17. Do tính chất phân tán của hệ thống này, nó tránh khóa trong các trang web lớn như Facebook, Twitter, Google, v.v. Bất kỳ cá nhân nào cũng có thể sở hữu miền riêng của họ và do đó hoạt động như nhà cung cấp danh tính của riêng họ.

Đây không phải là “xác thực dựa trên mẫu cho các trang web”. Nhưng nó là một nỗ lực để chuyển đổi từ các tiêu chuẩn hiện hành của xác thực dựa trên hình thức để một cái gì đó an toàn hơn: xác thực trình duyệt hỗ trợ.


146



Liên kết BrowserID đã chết - Mehdi
Dự án dường như đã bị bóp méo .... xem en.wikipedia.org/wiki/Mozilla_Persona - Jeff Olson


Tôi chỉ nghĩ rằng tôi muốn chia sẻ giải pháp này mà tôi thấy được làm việc tốt.

Tôi gọi nó là Trường giả (mặc dù tôi đã không phát minh ra điều này vì vậy không tín dụng cho tôi).

Tóm lại: bạn chỉ cần chèn nó vào <form> và kiểm tra xem nó có trống không khi xác thực:

<input type="text" name="email" style="display:none" />

Bí quyết là để đánh lừa một bot nghĩ rằng nó phải chèn dữ liệu vào một trường bắt buộc, đó là lý do tại sao tôi đặt tên là "email" đầu vào. Nếu bạn đã có một lĩnh vực được gọi là email mà bạn đang sử dụng, bạn nên thử đặt tên cho trường giả khác như "công ty", "điện thoại" hoặc "địa chỉ email". Chỉ cần chọn một cái gì đó bạn biết bạn không cần và những gì âm thanh như một cái gì đó mọi người bình thường sẽ tìm thấy hợp lý để điền vào một mẫu web. Bây giờ hãy ẩn input trường bằng cách sử dụng CSS hoặc JavaScript / jQuery - bất kỳ điều gì phù hợp với bạn nhất - chỉ không đặt đầu vào type đến hidden nếu không bot sẽ không rơi vào đó.

Khi bạn đang xác nhận hợp lệ biểu mẫu (phía máy khách hoặc phía máy chủ), hãy kiểm tra xem trường giả của bạn đã được điền để xác định xem nó có được gửi bởi một con người hay một bot hay không.

Thí dụ:

Trong trường hợp của một con người: Người dùng sẽ không nhìn thấy trường giả (trong trường hợp của tôi có tên là "email") và sẽ không cố gắng điền vào. Vì vậy, giá trị của trường giả sẽ vẫn trống khi biểu mẫu đã được gửi.

Trong trường hợp bot: Bot sẽ thấy một trường có loại text và một cái tên email (hoặc bất cứ điều gì nó được bạn gọi nó) và sẽ hợp lý cố gắng để điền vào nó với dữ liệu thích hợp. Nó không quan tâm nếu bạn theo kiểu biểu mẫu đầu vào với một số CSS lạ mắt, các nhà phát triển web sẽ làm tất cả thời gian. Dù giá trị trong trường giả là gì, chúng tôi không quan tâm miễn là nó lớn hơn 0 nhân vật.

Tôi đã sử dụng phương pháp này trên sổ lưu bút kết hợp với CAPTCHAvà tôi chưa thấy một bài đăng spam nào kể từ đó. Trước đây tôi đã sử dụng giải pháp chỉ CAPTCHA, nhưng cuối cùng nó dẫn đến khoảng năm bài đăng spam mỗi giờ. Thêm trường giả trong biểu mẫu đã dừng (ít nhất là cho đến bây giờ) tất cả thư rác xuất hiện.

Tôi tin rằng điều này cũng có thể được sử dụng tốt với một hình thức đăng nhập / xác thực.

Cảnh báo: Tất nhiên phương pháp này không phải là bằng chứng đánh lừa 100%. Bots có thể được lập trình để bỏ qua các trường nhập với kiểu display:none áp dụng cho nó. Bạn cũng phải suy nghĩ về những người sử dụng một số hình thức tự động hoàn thành (như hầu hết các trình duyệt đã tích hợp sẵn!) Để tự động điền vào tất cả các trường biểu mẫu cho họ. Họ cũng có thể chọn một lĩnh vực giả.

Bạn cũng có thể thay đổi điều này một chút bằng cách để trường giả hiển thị nhưng bên ngoài ranh giới của màn hình, nhưng điều này hoàn toàn tùy thuộc vào bạn.

Sáng tạo!


120



Đây là mẹo chống spam hữu ích, nhưng tôi khuyên bạn nên sử dụng tên trường khác với 'email' hoặc bạn có thể thấy rằng tính năng tự động điền của trình duyệt điền vào, vô tình chặn người dùng thực sự của trang web của bạn. - Nico Burns
Tôi cũng có một vài trong số này bằng cách sử dụng visibility:hidden và cũng position:absolute;top:-9000px bạn cũng có thể làm text-indent và cũng z-index trên một vài trong số các phần tử này và đặt chúng trong tên tệp nén CSS với các tên vụng về - vì các bot có thể phát hiện 1display: none` và bây giờ họ kiểm tra một loạt các kết hợp - tôi thực sự sử dụng các phương pháp này và chúng là thủ đoạn cũ của giao dịch . +1 - TheBlackBenzKid
Điều gì sẽ xảy ra khi người dùng bị suy giảm thị lực đang sử dụng trình xử lý màn hình để điều hướng biểu mẫu? - gtcharlie
Kỹ thuật này có tên: honeypot en.wikipedia.org/wiki/Honeypot_(computing) - pixeline
Không cần thiết kế nội tuyến. Chỉ cần thêm một lớp vào trường (có thể sử dụng một từ lạ mà không bao giờ có nghĩa là bất cứ điều gì cho một bot), và ẩn nó thông qua tệp CSS của trang web. Như: <input type="text" name="email" class="cucaracha"> và trong CSS của bạn: .cucaracha { display:none; }. - Ricardo Zea


Tôi không nghĩ câu trả lời ở trên là "sai" nhưng có nhiều lĩnh vực xác thực không được xúc động (hay đúng hơn là nhấn mạnh "cách triển khai các phiên cookie", chứ không phải "tùy chọn nào có sẵn và giao dịch là gì ".

Các chỉnh sửa / câu trả lời được đề xuất của tôi là

  • Vấn đề nằm trong thiết lập tài khoản nhiều hơn trong kiểm tra mật khẩu.
  • Việc sử dụng xác thực hai yếu tố là an toàn hơn nhiều so với các phương tiện mã hóa mật khẩu thông minh hơn
  • KHÔNG cố gắng triển khai biểu mẫu đăng nhập của riêng bạn hoặc lưu trữ cơ sở dữ liệu mật khẩu, trừ khi dữ liệu được lưu trữ là không có giá trị khi tạo tài khoản và tự tạo (có nghĩa là, phong cách web 2.0 như Facebook, Flickr, v.v.)

    1. Digest Authentication là một tiêu chuẩn dựa trên phương pháp tiếp cận được hỗ trợ trong tất cả các trình duyệt và máy chủ chính, mà sẽ không gửi một mật khẩu ngay cả trên một kênh an toàn.

Điều này tránh bất kỳ cần phải có "phiên" hoặc cookie như chính trình duyệt sẽ mã hóa lại giao tiếp mỗi lần. Đây là phương pháp phát triển "nhẹ" nhất.

Tuy nhiên, tôi không khuyến khích điều này, ngoại trừ các dịch vụ công cộng giá trị thấp. Đây là vấn đề với một số câu trả lời khác ở trên - không thử triển khai lại các cơ chế xác thực phía máy chủ - vấn đề này đã được giải quyết và được hỗ trợ bởi hầu hết các trình duyệt chính. Không sử dụng cookie. Không lưu trữ bất cứ thứ gì trong cơ sở dữ liệu tay của bạn. Chỉ cần hỏi, theo yêu cầu, nếu yêu cầu được xác thực. Mọi thứ khác sẽ được hỗ trợ bởi cấu hình và phần mềm đáng tin cậy của bên thứ ba.

Vì thế ...

Đầu tiên, chúng tôi đang bối rối việc tạo tài khoản ban đầu (với mật khẩu) với kiểm tra lại mật khẩu sau đó. Nếu tôi là Flickr và tạo trang web của bạn lần đầu tiên, người dùng mới có quyền truy cập vào giá trị bằng không (khoảng trống web). Tôi thực sự không quan tâm nếu người tạo tài khoản nói dối về tên của họ. Nếu tôi đang tạo một tài khoản của mạng nội bộ / extranet của bệnh viện, giá trị nằm trong tất cả hồ sơ y tế và vì vậy tôi làm quan tâm đến danh tính (*) của người tạo tài khoản.

Đây là phần rất khó. Các chỉ có giải pháp tốt là một trang web tin cậy. Ví dụ, bạn tham gia bệnh viện với tư cách bác sĩ. Bạn tạo một trang web được lưu trữ ở đâu đó với hình ảnh của bạn, số hộ chiếu của bạn và một khóa công khai, và băm tất cả chúng với khóa riêng. Sau đó bạn ghé thăm bệnh viện và quản trị viên hệ thống xem xét hộ chiếu của bạn, xem liệu ảnh có phù hợp với bạn không và sau đó băm băm trang / ảnh bằng khóa riêng tư của bệnh viện. Từ bây giờ, chúng tôi có thể trao đổi khóa và mã thông báo một cách an toàn. Như bất cứ ai có thể tin tưởng bệnh viện (có sốt bí mật BTW). Quản trị viên hệ thống cũng có thể cung cấp cho bạn RSA dongle hoặc xác thực hai yếu tố khác.

Nhưng đây là một nhiều rắc rối và không phải web 2.0. Tuy nhiên, đây là cách an toàn duy nhất để tạo tài khoản mới có quyền truy cập vào thông tin có giá trị không tự tạo.

  1. Kerberos và SPNEGO - một dấu hiệu duy nhất về các cơ chế với một bên thứ ba đáng tin cậy - về cơ bản người dùng xác minh với một bên thứ ba đáng tin cậy. (NB này không phải là bất kỳ cách nào không đáng tin cậy OAuth)

  2. SRP - loại xác thực mật khẩu thông minh mà không có bên thứ ba đáng tin cậy. Nhưng ở đây chúng ta đang đi vào cõi "an toàn hơn để sử dụng xác thực hai yếu tố, ngay cả khi đó là tốn kém hơn"

  3. SSL phía máy khách - cung cấp cho khách hàng chứng chỉ khóa công khai (hỗ trợ trong tất cả các trình duyệt chính - nhưng đặt ra các câu hỏi về bảo mật máy khách).

Cuối cùng nó là một sự cân bằng - chi phí của một vi phạm an ninh là gì so với chi phí thực hiện các cách tiếp cận an toàn hơn. Một ngày, chúng ta có thể thấy một PKI được chấp nhận rộng rãi và do đó không có nhiều biểu mẫu xác thực và cơ sở dữ liệu được cuộn riêng. Một ngày...


71



Khó mà nói được bạn đang nói về câu trả lời nào trong 'Tôi không nghĩ câu trả lời ở trên là "sai" - Davorak


Khi băm, không sử dụng thuật toán băm nhanh như MD5 (nhiều triển khai phần cứng tồn tại). Sử dụng một cái gì đó giống như SHA-512. Đối với mật khẩu, băm chậm hơn sẽ tốt hơn.

Bạn có thể tạo băm nhanh hơn, trình kiểm tra sức mạnh vũ phu nhanh hơn có thể hoạt động. Do đó, băm chậm sẽ làm chậm quá trình cưỡng bức. Một thuật toán băm chậm sẽ làm cho brute buộc không thực tế cho mật khẩu dài hơn (8 chữ số +)


48



SHA-512 cũng nhanh, vì vậy bạn cần hàng ngàn lần lặp. - Seun Osewa
"không sử dụng thuật toán băm nhanh ... băm chậm hơn là tốt hơn" - Giải thích? Tài liệu? - one.beat.consumer
Giải thích: Bạn có thể tạo băm nhanh hơn, bất kỳ trình kiểm tra sức mạnh vũ phu nào cũng có thể hoạt động nhanh hơn. Do đó, băm chậm sẽ làm chậm quá trình cưỡng bức. Một thuật toán băm chậm sẽ làm cho brute buộc không thực tế cho mật khẩu dài hơn (8 chữ số +) - NickG
Giống như một cái gì đó như bcrypt được thiết kế để băm từ từ. - Fabian Nicollier


Một bài viết hay về ước lượng sức mạnh mật khẩu thực tế là:

Dropbox Tech Blog »Lưu trữ Blog» zxcvbn: ước tính sức mạnh mật khẩu thực tế


46





Quy tắc yêu thích của tôi liên quan đến hệ thống xác thực: sử dụng mật khẩu, không phải mật khẩu. Dễ nhớ, khó crack. Thêm thông tin: Mã hóa Kinh dị: Mật khẩu so với cụm từ mật khẩu


41