将sslify=>TRUE用于WITH wp_Remote_Get/wp_Remote_POST是否安全

时间:2014-11-09 作者:Xaver

我通常使用此参数来防止wp_remote_getwp_remote_post

array(
    \'sslverify\' => false
)
出于安全原因,我想将其设置为true (或删除它,因为默认值为true)。

这样做会有什么问题吗?

3 个回复
最合适的回答,由SO网友:Otto 整理而成

TL;DR:是的,从WordPress 3.7或更高版本开始删除该设置。

过去,许多人专门添加了sslverify=false参数,因为他们安装的PHP无法正确验证证书。

通常,这是因为PHP安装没有使用CA根证书的最新副本进行更新。根证书经常更改,通常您不会注意到这种更改,因为它发生在正常的浏览器更新中。好吧,当您让PHP像浏览器一样检索https URL时,它也需要这些根证书更新。大多数主机从不更新PHP,也不更新PHP的任何特定部分(如证书文件)。

当WordPress在3.7版中实现自动更新时,确定有必要升级WordPress。组织API以要求安全通信。此时,WordPress开始包含CA根证书文件本身的副本,该文件来自Mozilla。因此,由于WordPress 3.7,WP\\U HTTP API函数使用此文件进行证书验证,而不是将任何旧版本或过时版本打包到PHP安装中。

因此,是的,对于WordPress 3.7或更高版本,建议删除sslverify参数并允许http函数进行适当的证书验证。任何运行SSL且密钥由已知CA之一签名的现代服务器都将得到正确验证。WP\\U HTTP应该有最新根证书的副本,核心项目将在WordPress中更新该证书文件以及正常更新。

SO网友:kaiser

有很多原因会导致SSL验证失败。从太多重定向到错误开始.ini 文件/设置或只是缺少证书或子域。在任何情况下,您都需要搜索原因fix it. 它周围没有路可走。

但要暂时解决该问题(假设您需要进一步开发代码并稍后修复SSL错误),可以使用过滤器:

add_filter( \'https_ssl_verify\', \'__return_false\' );
当您在远程请求期间运行此操作时,应该将其包装在一个回调中,该回调附加到在此类HTTP请求期间触发的过滤器。确保检查是否确实要删除正确案例的验证,并确保只运行一次,而不会取消对其他请求的保护。

add_filter( \'http_request_args\', function( $params, $url )
{
    // find out if this is the request you are targeting and if not: abort
    if ( \'foo\' !== $params[\'foo\'] )
         return $params;

    add_filter( \'https_ssl_verify\', \'__return_false\' );

    return $params;
}, 10, 2 );
如果这是一个公开发布的插件,那么您可能希望将其附加到用户可以打开或关闭的简单选项。您也可以先尝试验证的请求,如果没有(如果用户选择了未签名的请求),则切换到可能不安全的请求。

经验法则:

Donever 执行不安全的请求,直到您的用户同意并知道风险。

SO网友:Rarst

WordPress可以依赖底层服务器软件(通常是cURL)来执行网络请求。简而言之,因为这就是那个软件的优点和用途。

在一些服务器上,由于各种原因(我从来没有费心调查自己),服务器软件无法“验证”安全连接是非常典型的,会产生上述错误。

因此:

如果这是您控制的服务器上的专用代码,您应该确保服务器正确发出请求,并且未禁用此设置,如果这是用于公共分发的代码,您可能也不想禁用它,但如果它足够流行,它最终会出现在服务器上,在某个时候它会被破坏,你必须以某种形式支持它(从告诉人们需要正确的配置来提供设置,到为你的请求禁用它,等等)

结束

相关推荐

是否以编程方式检测CURLOPT_SSL_VERIFYPEER?

我使用最新的PHP类包装器设置了一个有点复杂的MailChimp插件。类包装器顶部的设置之一是: /** * CURLOPT_SSL_VERIFYPEER setting * @var bool */ public $ssl_verifypeer = true; 我们插件的一些用户必须手动将此设置更改为“false”,以使插件正常工作,我不知道此设置的原因或作用。什么服务器设置会强制用户将其设置为false?我在这里