2012-02-05 3 views
5

Tôi đã nghiên cứu điều này trong 2 ngày qua sau khi triển khai hệ thống của riêng mình vì cấm quá nhiều lần thử. Nhưng tôi đã không tìm thấy câu trả lời thích hợp mà tôi đang tìm kiếm. Mà khá nhiều là, cách tốt nhất để thực hiện điều này là gì?Cách tốt nhất để thực hiện lệnh cấm sau khi có quá nhiều lần đăng nhập

Hiện tại tôi đã thực hiện điều này thông qua lệnh cấm IP, nếu IP đó liên tiếp mắc lỗi đăng nhập 10 lần, IP bị cấm trong 30 phút kể từ khi có thể đăng nhập, họ vẫn có thể duyệt trang web. Tuy nhiên, nếu điều này xảy ra ở một khu vực dân cư cao, chẳng hạn như khuôn viên trường đại học, điều này sẽ không ngăn chặn hiệu quả toàn bộ trường học khi đăng nhập?

Vì vậy, có cách nào tốt hơn để thực hiện việc này, không sử dụng địa chỉ IP? Tôi đã nghĩ rằng tôi có thể làm điều đó với các tập tin cookie, nhưng người dùng cố gắng để bạo lực một tài khoản chỉ đơn giản có thể xóa cookie của họ sau mỗi 10 lần thử.

+0

Bạn nên sử dụng lại khung xác thực hiện tại bất cứ khi nào có thể, bởi vì, thực sự, nó phức tạp. Ví dụ: hãy xem https://github.com/delight-im/PHP-Auth, cả hai đều không có khung công tác bất khả tri và không có cơ sở dữ liệu. Nó điều chỉnh, đó là những gì bạn muốn, tự động. – caw

Trả lời

4

Cách tiếp cận tôi đã theo dõi một lần tương tự như cách tôi gặp phải trên trang ngân hàng điện tử của ngân hàng của tôi. Nó cấm đăng nhập thêm cho một số lượng ngày càng tăng trên cơ sở mỗi tài khoản, nói 5 lần thử, trong đó bạn đợi 10 giây, 1 phút, 5 phút, 15 phút, sau đó 30 phút chẳng hạn. Kẻ tấn công thường nhắm mục tiêu một tài khoản cụ thể. Cũng nên có một quy tắc chung được áp dụng cho mỗi địa chỉ IP, khóa đăng nhập sau một số lần thử nhất định, mà phải lớn hơn 5, nói 10. Ngoài cả hai quy tắc, bạn có thể so sánh các trình duyệt và cookie, vv để tăng dung sai.

+1

vấn đề với điều này vẫn còn mặc dù, là nó chặn tất cả người dùng trên ip đó và cung cấp cho họ tăng thời gian chờ đợi, đó là cùng một vấn đề tôi đã có với việc thực hiện tôi đang sử dụng. – JimmyBanks

+0

Tôi muốn tăng thời gian chờ đợi cho tài khoản được nhắm mục tiêu, nhưng không phải cho những người khác. Bạn cũng có thể đánh giá cookie miễn là bạn có thể. Nếu không có cookie để theo dõi, các biện pháp khác có thể được thực hiện. Một cuộc tấn công bruteforce thuần túy mà không có thông tin khách hàng thích hợp chỉ có thể bị chặn bởi IP hoặc một phần bằng IP: cổng kết nối liên tục. – Sam

+0

oh tôi hiểu ý của bạn là gì, vâng, điều đó sẽ khá hiệu quả, tôi nên nghĩ về điều đó trước đây;) – JimmyBanks

5

Tạo bảng mysql có tên "failed_logins" với hai trường, trường "Người dùng"/khóa ngoài và trường "Dấu thời gian".

Khi người dùng đăng nhập thành công, hãy xóa tất cả các hàng "failed_logins" cho người dùng đó.

Khi người dùng đăng nhập không thành công, hãy tạo hàng mới trong "failed_logins" cho người dùng đó bằng dấu thời gian hiện tại.

Trên mỗi nỗ lực đăng nhập cho một người dùng nhất định, trước khi kiểm tra để xem nếu mật khẩu là đúng/sai:

  • chạy một truy vấn xóa tất cả "failed_logins" hàng già hơn 15 phút (ví dụ).

  • chạy truy vấn kiểm tra số lượng hàng trong fail_logins cho người dùng đang cố đăng nhập. Nếu> = 5 (ví dụ), hãy xóa nỗ lực đăng nhập, thông báo cho người dùng rằng họ đã bị khóa tài khoản của họ và thử lại sau một thời gian ngắn.

Kết quả: Người dùng bị khóa tài khoản sau 5 lần đăng nhập không thành công trong vòng 15 phút.

-5

Đôi khi bạn cần thêm bảo vệ bổ sung cho trang web được bảo vệ bằng mật khẩu. Bài viết này giải thích cách truy cập vào trang đăng nhập có thể bị hạn chế sau ba lần đăng nhập không thành công. Lược đồ này sử dụng địa chỉ IP của khách truy cập để lưu trữ các nỗ lực đăng nhập trong cơ sở dữ liệu và chặn quyền truy cập vào tính năng đăng nhập trong 30 phút sau lần thử thứ ba không thành công.

http://webcheatsheet.com/php/blocking_system_access.php