2011-06-22 56 views
34

Mật khẩu có bảo vệ thư mục bằng .htaccess cách tốt nhất để ngăn người dùng trái phép xem các tệp của nó không? Có bất kỳ lựa chọn thay thế nào để bảo vệ nội dung của thư mục trong khi vẫn có thể truy cập vào những người được xác thực để xem nội dung đó không?Bảo mật bằng mật khẩu .htaccess là như thế nào?

Ngoài ra, không ai có thể cố gắng để bruteforce theo cách của họ, gây căng thẳng trên máy chủ?

Trả lời

56

Một số điểm cần chú ý:

Thêm bảo mật trong một .htaccess luôn có thể được thực hiện mà không có sự .htaccess, bằng cách sử dụng <Directory> hướng dẫn trong cấu hình chính (hoặc cấu hình virtualhost). Nó sẽ đi nhanh hơn (nếu bạn loại bỏ hoàn toàn hỗ trợ cho .htaccess với AllowOverride None) và bạn sẽ không có nguy cơ bị ai đó thay đổi .htaccess của bạn.

Có một số cách để thêm bảo mật trong tệp .htaccess, một trong những cách này là sử dụng Xác thực HTTP cơ bản với các tệp .htpasswd. Các tệp .htpasswd này không được nằm trong thư mục gốc của thư mục web. Một trong những khả năng khác là sử dụng HTTP Digest Authentification, với sự hạn chế mà các trình duyệt rất cũ sẽ không hỗ trợ nó (như IE6).

Chúng tôi thường gặp phải Xác thực cơ bản HTTP. Đây là một sự bảo vệ rất yếu, đơn giản chỉ vì cách nó hoạt động. Khi yêu cầu thứ nhất bạn bị từ chối, trình duyệt của bạn sẽ yêu cầu bạn nhập mật khẩu và đăng nhập và ghi nhớ liên kết đăng nhập mật khẩu này cho máy chủ web được yêu cầu. Sau đó, đối với mọi yêu cầu được gửi đến máy chủ web này cho đến khi bạn đóng trình duyệt của mình thông tin đăng nhập và mật khẩu sẽ được thêm vào tiêu đề yêu cầu, không được mã hóa. Chỉ đơn giản là một mã hóa base64 được áp dụng cho chuỗi 'Yourlogin: Yourpassword', để làm cho nó trông giống như một chuỗi ASCII7 thuần túy và ngăn ngừa sự cố mã hóa.

Vì vậy, bất cứ ai đánh hơi yêu cầu của bạn (điểm phát sóng wifi, người đàn ông ở giữa, mạng cục bộ, công tắc tiếng vọng, v.v.) sẽ biết mật khẩu và thông tin đăng nhập của bạn. Xấu. Quy tắc là ":

không bao giờ sử dụng cơ bản HTTP xác thực nếu kết nối không HTTPS là (SSL)

Nếu webserver của bạn là hoàn toàn trong HTTPS không có vấn đề (xem chỉnh sửa trên. dưới cùng), văn bản/mật khẩu rõ ràng được mã hóa bằng SSL.

Đối với vấn đề bạo lực (và có, một số người có thể cố gắng đăng nhập/mật khẩu, trừ khi bạn điều chỉnh mod_security module để ngăn chặn) Security Consideration of the htpasswd page khá rõ ràng:

Khi sử dụng thuật toán crypt(), lưu ý rằng chỉ 8 ký tự đầu tiên của mật khẩu được sử dụng để tạo mật khẩu. Nếu mật khẩu được cung cấp dài hơn, các nhân vật phụ sẽ được âm thầm bỏ đi

và:

Trên Windows và MPE nền tảng, mật khẩu mã hóa với htpasswd được giới hạn không quá 255 ký tự. Mật khẩu dài hơn sẽ bị cắt bớt thành 255 ký tự.

Vì vậy, hãy sử dụng mã hóa SHA băm cho mật khẩu (ngay cả khi nó không được muối).

Cách khác để cho phép người dùng được xác thực duyệt nội dung thư mục là xử lý danh sách thư mục và tải tệp lên trong ứng dụng của bạn (PHP, Tomcat, v.v.) và không có danh sách tự động apache. Về mặt bảo mật, mô-đun danh sách tự động (mod_autoindex) là thứ bạn không nên có trên apache đang chạy của mình.

Sửa

máy chủ đầy đủ HTTPS không cần thiết nếu bạn muốn bảo vệ chỉ có một số url với HTTP xác thực. Những gì bạn thực sự cần là rằng tất cả các url được bảo vệ này phải nằm trong https, nếu url không được bảo vệ nằm trong miền http, tiêu đề xác thực sẽ không được sử dụng vì đây là tên miền khác (và tiêu đề xác thực được gửi theo tên miền). Vì vậy, bạn có thể thêm các quy tắc chuyển hướng cơ bản trong miền http cho các url này, có thể giống như sau:

RedirectMatch 301 ^/secure/(.*)$ https://www.example.com/secure/$1 
+3

SHA không phải là mã hóa mà là hàm băm mật mã. – Gumbo

+1

@Gumbo: hoàn toàn đúng, cố định – regilero

+1

Cảm ơn bạn đã trả lời/giải thích chi tiết như vậy! – Steve

Các vấn đề liên quan