问题描述

我最近听到有人说 WordPress 确实发送有关您的博客的数据回到家。真的吗?如果是这样的话,代码中的哪些数据可以看到交换的内容?

最佳解决方案

是的,它确实。见 Ticket #16778 wordpress is leaking user/blog information during wp_version_check()。所有细节都在/wp-includes/update.php 中:

if ( is_multisite( ) ) {
    $user_count = get_user_count( );
    $num_blogs = get_blog_count( );
    $wp_install = network_site_url( );
    $multisite_enabled = 1;
} else {
    $user_count = count_users( );
    $user_count = $user_count['total_users'];
    $multisite_enabled = 0;
    $num_blogs = 1;
    $wp_install = home_url( '/' );
}

$query = array(
    'version'           => $wp_version,
    'php'               => $php_version,
    'locale'            => $locale,
    'mysql'             => $mysql_version,
    'local_package'     => isset( $wp_local_package ) ? $wp_local_package : '',
    'blogs'             => $num_blogs,
    'users'             => $user_count,
    'multisite_enabled' => $multisite_enabled
);

$url = 'http://api.wordpress.org/core/version-check/1.6/?' . http_build_query( $query, null, '&' );

$options = array(
    'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ),
    'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
    'headers' => array(
        'wp_install' => $wp_install,
        'wp_blog' => home_url( '/' )
    )
);

$response = wp_remote_get($url, $options);

用户代理包含安装的 URL,因此所有这些数据不再是匿名的。为了获得一些隐私的权限,过滤'http_request_args'并更改您不想泄露的数据。

这是一个简单的例子来匿名的 UA 字符串 (从 recent blog article):

add_filter( 'http_request_args', 't5_anonymize_ua_string' );

/**
 * Replace the UA string.
 *
 * @param  array $args Request arguments
 * @return array
 */
function t5_anonymize_ua_string( $args )
{
    global $wp_version;
    $args['user-agent'] = 'WordPress/' . $wp_version;

    // catch data set by wp_version_check()
    if ( isset ( $args['headers']['wp_install'] ) )
    {
        $args['headers']['wp_install'] = 'http://example.com';
        $args['headers']['wp_blog']    = 'http://example.com';
    }
    return $args;
}

你可以把它改成…

add_filter( 'http_request_args', 't5_anonymize_ua_string', 10, 2 );

… 并将请求 URL 作为回调的第二个参数。现在,您可以检查该 URL 是否包含 http://api.wordpress.org/core/version-check/,并将所有值更改为想要取消请求并发送一个新的值。仍然没有办法只改变 URL,这就是为什么我在票证中创建补丁。

次佳解决方案

当我使用.org API(安装/搜索/更新) 时,WordPress 将版本数据发送回.org 。然后将该数据整理成图表图形。您可以看到数据 here 。我假设在绘制环境要求的路线图 (即 PHP4> PHP5,MySQL 版本支持等) 时也会使用此选项。

以下是.org 统计资料的样例:

作为附注,您始终必须从可信来源安装插件。 Otto 和插件目录的其他策展人已经做了很好的工作,除掉使用 base64 + eval 的插件将个人信息发送回不道德的插件作者。我可以保证有一些在存储库中每周弹出一次。这适用于.org 回购以外的主题。

我听说过创建一个插件审核小组 (类似于主题审查小组),这将确保未来存储库的完整性。您可以加入 wp-hackers 邮件列表和 get more information there 。这就是这些类型的讨论真的被充实了。

第三种解决方案

是的,你是对的。 wordpress 更新检查程序,插件更新检查程序和主题更新检查程序发送有关的常规信息

  • 你的 IP
  • 博客网址
  • WordPress 版本
  • PHP 版本
  • 如果有一个区域设置
  • 插件标题,说明,作者 – 包括构成其中一部分的所有 URL 。
  • 您的网站上的所有插件的完整列表,无论它们是否活动。

到 api.wordpress.org 网站。这是 2007 年以来的一个老讨论。您可以在我的帖子 WordPress phone home – Spyware or Justified 的帖子中阅读更多内容。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。