Liệu cài đặt bảo mật .htaccess này có thực sự hoạt động không?


7

Cái này .htaccess làm gì?

Tôi có đúng không khi nghĩ rằng tất cả những gì nó làm là ngăn chặn các cuộc tấn công vũ phu tự động?

Vì vậy, để truy cập wp-login.php, bạn phải nhập thủ công URL của tên miền để từ chối tất cả các bot tìm kiếm wp-login.php

Tôi có đúng không?

Đây là quy tắc .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^https://(.*)?my-domain.com [NC]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteRule ^(.*)$ - [F]
</IfModule>

Câu trả lời:


9

Dường như để ngăn chặn mọi yêu cầu POST đối với wp-login.php không được thực hiện từ một trang trên my-domain.com.

Khi trình duyệt gửi yêu cầu POST, giả sử sau khi gửi biểu mẫu, nó sẽ bao gồm tiêu đề HTTP Referrer thông báo cho máy chủ biết yêu cầu đến từ đâu.

Về mặt lý thuyết, điều này ngăn các bot gửi yêu cầu POST trực tiếp đến wp-login.php như một phần của cuộc tấn công vũ phu, nhưng trình giới thiệu HTTP không quan trọng để giả mạo, vì vậy nó không thực sự hữu ích.


6

Điều này không ngăn cản: Brute Force

tất cả những gì nó làm là ngăn chặn các cuộc tấn công vũ phu tự động?

Không. Điều này không ngăn chặn các cuộc tấn công vũ phu.

Trong một cuộc tấn công vũ phu, kẻ tấn công có quyền kiểm soát tất cả các tham số của yêu cầu HTTP. Điều này bao gồm người giới thiệu. Vì kẻ tấn công có thể gửi các tham chiếu tùy ý, điều này không ngăn chặn các cuộc tấn công vũ phu. (Hầu hết) tất cả các công cụ vũ lực sẽ cho phép thiết lập một người giới thiệu và thiết lập trang web làm người giới thiệu là khá chuẩn.

Các cơ chế bảo vệ chống lại lực lượng vũ phu sẽ bị cấm hoặc điều tiết trên cơ sở IP hoặc tên người dùng, cũng như captcha.

Điều này có thể nhằm ngăn chặn: CSRF

Mã này có thể đã được thụt lề để thêm kiểm tra tham chiếu cho tất cả các yêu cầu POST vào khu vực quản trị. Nếu người giới thiệu không hợp lệ, yêu cầu bị từ chối.

Trong một cuộc tấn công CSRF, kẻ tấn công buộc nạn nhân thực hiện yêu cầu POST thay đổi trạng thái. Điều này có thể xảy ra bằng cách đăng mã HTML và Javascript tại trang Attacker.com, sau đó tự động gửi yêu cầu đến Vict.com sau khi nạn nhân được xác thực truy cập trang web.

Kiểm tra tham chiếu là một cơ chế để bảo vệ chống lại CSRF. Vì chỉ có nạn nhân.com được chấp nhận là người giới thiệu hợp lệ, kẻ tấn công không thể buộc nạn nhân gửi yêu cầu từ tên miền của chính họ.

Tất nhiên, WordPress có bảo vệ CSRF riêng (thông qua các tổ chức chống CSRF). Nhưng nó có thể không bắt được tất cả các trường hợp và tính bảo mật của các plugin phụ thuộc rất nhiều vào nhà phát triển plugin.

Kiểm tra tham chiếu bổ sung có thể giúp ngăn ngừa các lỗ hổng CSRF trong lõi WP, và đặc biệt là trong các plugin, không thể khai thác được.

Tất nhiên, nếu đây là ý định, mã bị lỗi. Các $trong RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ngăn ngừa việc kiểm tra đối với hầu hết các yêu cầu.

Việc kiểm tra cũng có thể dễ dàng được bỏ qua. Các giới thiệu sau đây sẽ được chấp nhận:

Referer: http://example.com.org
Referer: http://not-example.com
Referer: http://notexample.com
Referer: http://attacker.com/example.com
[...]

Để thêm bất cứ điều gì vào bảo mật của trang web, hai vấn đề này cần phải được khắc phục trước tiên. Mã cũng có thể được cải thiện hơn nữa bằng cách không bị hạn chế đối với các yêu cầu POST (trong các ứng dụng được viết kém, các yêu cầu GET cũng có thể thay đổi trạng thái máy chủ hoặc các yêu cầu POST có thể được chuyển đổi thành các yêu cầu GET). Vì kiểm tra chỉ áp dụng cho quản trị viên, điều này không hạn chế khả năng sử dụng.


4

Bạn đúng một phần

Mã ở trên của bạn giúp bảo vệ trang web WordPress của bạn bằng cách chỉ cho phép các yêu cầu đăng nhập đến trực tiếp từ tên miền của bạn.

Hầu hết các cuộc tấn công vũ phu gửi yêu cầu POST trực tiếp đến tập lệnh wp-login.php của bạn. Vì vậy, yêu cầu POST yêu cầu phải có tên miền của bạn làm người giới thiệu giúp ngăn chặn các bot này.

Bạn có thể tiến thêm một bước nếu bạn có IP tĩnh bằng cách sử dụng mã sau:

RewriteEngine on 
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR}!^111\.111\.111\.111$
RewriteRule ^(.*)$ - [R=403,L]

* Thay thế bằng địa chỉ IP tĩnh của bạn.

* Có thể không hoạt động nếu trang web của bạn đứng sau dịch vụ DNS như CloudFlare.

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.