PHP 的 fopen() 在访问 https 资源时是否可以防止典型的攻击


Does PHP's fopen() protect against typical attacks when accessing https resources?

如果我使用PHP的fopen()函数从HTTPS网站检索数据,这就是所谓的安全HTTPS连接吗? 即它是否提供针对中间人和窃听攻击的保护?

不是默认的,不是。

它将始终提供某种形式的保护,防止简单的窃听攻击,因为数据将始终被加密(只要您连接的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 );