Nếu tôi sử dụng chức năng fopen()
của PHP để truy xuất dữ liệu từ một trang web HTTPS, đó là điều mà người ta gọi là kết nối HTTPS an toàn. tức là nó cung cấp sự bảo vệ chống lại các cuộc tấn công giữa người và trung gian và nghe lén?Fopen() của PHP có bảo vệ chống lại các cuộc tấn công điển hình khi truy cập tài nguyên https không?
Fopen() của PHP có bảo vệ chống lại các cuộc tấn công điển hình khi truy cập tài nguyên https không?
Trả lời
Không theo mặc định, không.
Nó sẽ luôn cung cấp một số hình thức bảo vệ chống lại các cuộc tấn công nghe trộm đơn giản vì dữ liệu sẽ luôn được mã hóa (miễn là máy chủ SSL mà bạn đang kết nối để cho phép sử dụng ít nhất một mật mã được mã hóa) được cho phép trong các kết nối HTTPS: roll-eyes :) Tuy nhiên, theo mặc định, nó sẽ không bảo vệ chống lại man-in-the-middle vì nó không xác nhận chứng chỉ của máy chủ, do đó bạn không thể tự tin rằng bạn đã kết nối với máy chủ dự định.
Xác thực chứng chỉ có thể được bật. Để làm như vậy, bạn sẽ cần cung cấp gói chứng chỉ gốc và sử dụng đối số thứ tư cho fopen
cho phép bạn chỉ định ngữ cảnh luồng. Luồng luồng cho phép bạn sửa đổi hành vi của luồng. Chuyển đổi ví dụ bên dưới làm cho chứng chỉ được xác thực dựa vào chứng chỉ gốc trong tệp bó được chỉ định.
$context = stream_context_create(array(
'ssl' => array(
'cafile' => 'ca_bundle.crt',
'verify_peer' => true
)
));
$file = fopen($url, 'r', false, $context);
Một điều bổ sung bạn có thể muốn làm là hạn chế tập hợp mật mã cho phép chỉ cho phép các hình thức mã hóa mạnh. Mật mã có sẵn mạnh nhất (cho phép bởi cả máy khách và máy chủ) nên được sử dụng theo mặc định; tuy nhiên, nếu bạn thực sự kén chọn, bạn có thể muốn từ chối các kết nối đến các máy chủ không hỗ trợ mức mã hóa đủ cao. Nếu có ai biết cách thực hiện điều này trong PHP, vui lòng đăng bài. – Cheekysoft