将sslverify => true与wp_remote_get / wp_remote_post一起使用是否安全?


18

我通常使用此参数来防止wp_remote_get和发生错误wp_remote_post

array(
    'sslverify' => false
)

出于安全原因,我想将其设置为true(或将其删除,因为默认值为true)。

这样做会不会给我带来任何问题?

Answers:


23

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

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

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

当WordPress在3.7版中实现自动更新时,确定有必要升级WordPress.org API以要求安全通信。此时,WordPress开始包含来自Mozilla的CA Root证书文件本身的副本。因此,从WordPress 3.7开始,WP_HTTP API函数使用此文件来进行证书验证,而不是PHP安装中打包的任何旧版本或过时版本。

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


感谢奥托,我认为这很有帮助。我将在插件中做一些条件检查
Xaver

9

有很多原因会导致SSL验证失败。从太多的重定向开始,到错误的.ini文件/设置,或者只是缺少证书或子域。无论如何,您都需要搜索原因并加以解决。有没有它周围的方式。

但是要暂时解决该问题(假设您需要进一步开发代码并稍后修复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 );

如果这是一个公开发行的插件,那么您可能希望将其附加到一个简单的选项上,用户可以打开或关闭它。您也可以先尝试验证后的请求,否则请尝试(如果用户选择了未签名的请求),然后切换到可能不安全的请求。

经验法则:

不要永远,直到你的用户已经同意这样做,风险认识进行不安全的请求。


1
谢谢,我现在正在本地环境中搜索问题
Xaver

4

WordPress可以依靠基础服务器软件(通常是cURL)来执行网络请求。简而言之,因为这就是该软件的优点所在。

在某些服务器上,由于各种原因(我从来没有打扰过自己),服务器软件通常无法“验证”安全连接,从而产生上述错误。

所以:

  • 如果这是您控制的服务器上的私人代码,则应确保服务器正确发出了请求并且未禁用此设置
  • 如果这是用于公共发行的代码,您可能也不想禁用它,但是,如果它足够流行,它将最终在某个时候被破坏的服务器上使用,您必须以某种形式提供支持(从告诉人们期望正确的配置可以提供针对您的请求禁用它的设置,依此类推)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.