Làm thế nào để ngăn chặn truy cập vào trang web mà không có kết nối SSL?


11

Tôi có một trang web đã cài đặt chứng chỉ SSL, vì vậy nếu tôi truy cập trang web bằng cách sử dụng httpsthay vì httptôi sẽ có thể kết nối bằng kết nối an toàn.

Tuy nhiên, tôi đã nhận thấy rằng tôi vẫn có thể truy cập trang web một cách không an toàn, tức là. bằng cách sử dụng httpthay vì https.

Làm cách nào tôi có thể ngăn mọi người sử dụng trang web một cách không an toàn?

Nếu tôi có một thư mục trên trang web, ví dụ. samples/, tôi có thể ngăn kết nối không an toàn đến thư mục này không?

Câu trả lời:


12

Thật không may, giải pháp chung duy nhất cho vấn đề này là chỉ cung cấp cho người dùng của bạn https://và đảm bảo rằng họ sẽ chỉ sử dụng nó. Cuối cùng, trách nhiệm của người dùng là kiểm tra xem họ có đang sử dụng SSL / TLS như họ mong đợi hay không.

Các giải pháp khác dễ bị tấn công giữa chừng, ngay cả khi trang web chỉ chấp nhận kết nối SSL / TLS. Kẻ tấn công có thể chặn lưu lượng truy cập http://example.com(theo yêu cầu của người dùng, ngay cả khi thậm chí example.comkhông nghe trên cổng đó) và thay thế nó bằng cách tự kết nối với họ https://example.com, ủy quyền lại cho người dùng.

Có một quy tắc OWASP chống lại chuyển hướng tự động vì điều này. Nó đã được gỡ bỏ, có thể là do chuyển hướng không phải là một cách tồi để giảm thiểu rủi ro (đặc biệt là chống lại những kẻ nghe trộm thụ động), nhưng không giải quyết được vấn đề cơ bản.

Có nhiều kỹ thuật khác nhau mà bạn có thể sử dụng để hướng dẫn người dùng đến trang web HTTPS và không nên sử dụng chúng (mặc dù nó sẽ không bảo vệ họ trước những kẻ tấn công MITM đang hoạt động).

Đầu tiên, nếu bạn không có bất cứ thứ gì nên được phục vụ trong HTTP đơn giản trên máy chủ web, hãy tắt cổng 80 (ví dụ: loại bỏ Listen 80trong cấu hình của Apache httpd). Người dùng sẽ phải sử dụng https://mọi lúc, điều này có thể gây bất tiện.

Thứ hai, trong phần cấu hình Apache httpd của bạn cho một con đường cụ thể (một trong hai Locationhoặc Directory), sử dụng SSLRequireSSLchỉ thị : nó sẽ yêu cầu sử dụng của SSL / TLS (ngay cả khi bạn đã cấu hình nó trên một cổng khác trên thực tế). Các máy chủ web khác có thể có chỉ thị tương tự.

Thứ ba, bạn có thể sử dụng chuyển hướng, bằng cách sử dụng mod_rewritehoặc trong mã của mình (nếu đó là một ứng dụng). Một cái gì đó như thế này sẽ làm, đối với một vị trí cụ thể ( xem HTTPSbiến đặc biệt ; bạn cũng có thể sử dụng 302, nhưng 301 sẽ tốt hơn nếu điều này là lâu dài hơn):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]

Quan trọng hơn, đảm bảo rằng tất cả các liên kết đến phần an toàn đó sử dụng https://. Không bao giờ dựa vào chuyển hướng tự động để thực hiện công việc cho bạn. Vì lý do này, tôi khuyên bạn không nên sử dụng nó trong giai đoạn phát triển .

Tuy nhiên, tôi đã nhận thấy rằng tôi vẫn có thể truy cập trang web một cách không an toàn, tức là. bằng cách sử dụng httpthay vì https.

Điều này cũng có vẻ như bạn đang sử dụng cùng một cấu hình cho cả hai httphttps. Nếu bạn đang sử dụng Apache Httpd, tôi khuyên bạn nên chia cấu hình thành hai phần riêng biệt VirtualHost: một cho cổng 80 và một cho cổng 443. Họ không phải có cùng cấu hình: chỉ không đặt những gì chỉ dành cho HTTPS trong máy chủ ảo HTTP cả.


Một cách để giảm thiểu các vấn đề được đề cập ở trên là sử dụng HTTP Strict Transport Security , cho các trình duyệt hỗ trợ nó (áp dụng cho toàn bộ máy chủ theo như tôi biết). Kết nối đầu tiên vẫn có thể bị lộ nếu https://không được sử dụng mà không có chuyển hướng, nhưng dù sao cũng có thể có một danh sách các trang web được tải sẵn mong đợi https:// (và được bật cho HSTS).


Thông tin tốt, làm thế nào để gmail làm điều này? - từ cái nhìn của những thứ họ buộc https.
toomanyairmiles

3
Họ sử dụng một chuyển hướng. Điều này hoạt động tốt, miễn là bạn, như người dùng mong đợi nó được https://mail.google.com. Nếu, với tư cách là một người dùng, bạn thấy nó hoạt động với http://mail.google.com, có lẽ có một MITM ủy quyền các yêu cầu cho chính hãng https://mail.google.com. Thật không may, Gmail không thể làm gì nhiều về điều đó nếu chính người dùng không kiểm tra. Nguyên tắc giống như trong cuộc sống thực: nếu Alice muốn nói chuyện với Bob, nhưng nói chuyện với Chuck (người tự xưng là Bob) thay vì không xác minh ID, Bob sẽ không biết về cuộc trò chuyện này và sẽ không thể làm được bất cứ thứ gì về nó. Đó là trách nhiệm của Alice.
Bruno

Tôi đã thấy một số tập lệnh PHP xung quanh rằng nó sẽ xác minh nếu được kết nối với HTTPS và chuyển hướng nếu không sử dụng SSL đến địa chỉ HTTPS. Tất nhiên, đây không phải là nhiệm vụ dễ dàng trừ khi bạn đang xây dựng trang web của mình ngay bây giờ.
Chim cánh cụt ẩn danh

@AnnonomusPerson, đó chính xác là cùng một nguyên tắc và đó là những gì quy tắc viết lại từ HTTP sang HTTPS. Cho dù bạn thực hiện theo lập trình hay theo cấu hình đều không thành vấn đề, thì đó vẫn là một chuyển hướng với một yêu cầu ban đầu trong HTTP đơn giản, điều này cũng gây ra vấn đề tương tự.
Bruno

3

Tất cả những gì bạn cần là chuyển hướng lưu lượng truy cập http sang https - xem bài viết này 'Chuyển hướng http sang https kết nối an toàn Apache - buộc Kết nối HTTPS' .

Đối với một thư mục con đặt cái này trong một tập tin htaccess trong chính thư mục đó.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 

Bạn có thể làm điều này chỉ xảy ra cho một số thư mục con nhất định?
CJ7

@CraigJ xin lỗi, đã bỏ lỡ phần thư mục con, câu trả lời được cập nhật.
toomanyairmiles

3
Mặc dù điều này làm giảm rủi ro một chút, nhưng điều này không hoạt động chống lại những kẻ tấn công MITM đang hoạt động.
Bruno

0

Việc buộc truy cập thông qua HTTPS trên thực tế là có thể, bên cạnh đó là một bước bắt buộc để làm cho trang web của bạn trở thành MITM-, snooper- và PEBKAC. Nó không phải là trách nhiệm của người dùng, điều đó không làm việc . Thay vào đó, khuyến khích người dùng của bạn sử dụng các trình duyệt an toàn.

Buộc HTTPS được thực hiện thông qua HSTS ( HTTP Strict-Transport-Security ). Basic HSTS được bảo mật sau lần đầu tiên người dùng truy cập trang web của bạn qua HTTPS (trên tất cả các trình duyệt hỗ trợ; IE thiếu khả năng ). HSTS được tải sẵn luôn bảo mật và bao gồm các trình duyệt phát hành nhanh hiện đại (Chromium và các dẫn xuất, Firefox).

Để biết tổng quan đầy đủ hơn về bảo mật HTTP (giải quyết các url, chuyển hướng, cookie và nội dung hỗn hợp), hãy xem cách di chuyển HTTPS này . HSTS là bước cuối cùng trong quá trình di chuyển lũy tiến. Bạn không thực sự cần phải làm theo đơn đặt hàng nếu trang web của bạn hoàn toàn mới.

Các tiêu chuẩn liên quan: cookie an toàn (quan trọng nếu cookie của bạn tồn tại lâu hơn tiêu đề HSTS), cookie HTTPOnly ( trong khi bạn đang bảo vệ cookie của mình), HPKP (đối với các trình duyệt hiện đại và những kẻ tấn công tài nguyên hơn).

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.