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

时间:2012-05-24 08:49:19

标签: php security ssl fopen man-in-the-middle

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

1 个答案:

答案 0 :(得分:5)

默认情况下不是。

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