5
如果我使用PHP的fopen()
功能從一個HTTPS的網站上檢索數據,是什麼人會稱之爲安全的HTTPS連接。即它是否提供防止中間人和竊聽攻擊的保護?訪問https資源時,PHP的fopen()能夠抵禦典型的攻擊嗎?
如果我使用PHP的fopen()
功能從一個HTTPS的網站上檢索數據,是什麼人會稱之爲安全的HTTPS連接。即它是否提供防止中間人和竊聽攻擊的保護?訪問https資源時,PHP的fopen()能夠抵禦典型的攻擊嗎?
缺省情況下,沒有。
它將始終爲簡單的竊聽攻擊提供某種形式的保護,因爲數據將始終被加密(只要您連接的SSL服務器允許使用至少一個加密密碼 - 是,加密密碼在HTTPS連接中是允許的:roll-eyes :)但是,默認情況下,它不能防止中間人攻擊,因爲它不會驗證服務器的證書,因此您無法確信已連接到打算服務器。
證書驗證可以接通。爲此,您需要提供一個根證書包,並使用允許您指定流上下文的fopen
的第四個參數。流上下文允許您修改流的行爲。下面的開關示例將使證書針對指定包文件中的根證書進行驗證。
$context = stream_context_create(array(
'ssl' => array(
'cafile' => 'ca_bundle.crt',
'verify_peer' => true
)
));
$file = fopen($url, 'r', false, $context);
您可能想要做的一件事是限制允許的一組密碼以僅允許強加密形式。應該默認使用最強的可用密碼(客戶端和服務器都允許)但是,如果您真的很挑剔,那麼您可能想要拒絕與不支持高度加密級別的服務器的連接。 如果有人知道如何在PHP中實現這一點,請發表。 – Cheekysoft