什么是强制插件更新,我如何避免它并将其用于我的插件

时间:2015-03-13 作者:Mark Kaplun

在twitter上的讨论之后,它看起来像wordpress。org有能力为插件推送安全更新,即使是那些没有选择接收自动插件更新的站点。有人能解释一下它的合理性吗?我怎样才能阻止这种更新?

另一方面,这种功能受到wordpress“魔力”的限制。org,或者我可以使用相同的机制来更新从我自己的服务器分发的插件和主题,同时保持与wordpress core的一般更新过程和规则的一致性(显然,在我的代码中,我可以绕过一切来触发更新,问题是如何通过设置常量或使用各种与更新相关的过滤器来最好地符合用户的期望)。

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

要回答第一个问题

如果您查看WP_Automatic_Updater 在中找到类wp-admin/includes/class-wp-upgrader.php 我们注意到该方法is_disabled 该方法使用的should_update 确定是否允许自动更新。

这个is_disabled 方法将在以下条件下返回true,

如果DISALLOW_FILE_MODS 常量已定义且为trueWP_INSTALLING 如果AUTOMATIC_UPDATER_DISABLED 常量定义为trueAUTOMATIC_UPDATER_DISABLED 也与过滤器关联,automatic_updater_disabled, 因此,即使已定义,也有可能在其他地方过滤该值,在这种情况下,最好声明以下挂钩:

add_filter( \'automatic_updater_disabled\', \'__return_true\' );

下面是从WP_Automatic_Updater 类别:

wp-admin/includes/class-wp-upgrader.php:1730

/**
 * Whether the entire automatic updater is disabled.
 *
 * @since 3.7.0
 */
public function is_disabled() {
    // Background updates are disabled if you don\'t want file changes.
    if ( defined( \'DISALLOW_FILE_MODS\' ) && DISALLOW_FILE_MODS )
        return true;

    if ( defined( \'WP_INSTALLING\' ) )
        return true;

    // More fine grained control can be done through the WP_AUTO_UPDATE_CORE constant and filters.
    $disabled = defined( \'AUTOMATIC_UPDATER_DISABLED\' ) && AUTOMATIC_UPDATER_DISABLED;

    /**
     * Filter whether to entirely disable background updates.
     *
     * There are more fine-grained filters and controls for selective disabling.
     * This filter parallels the AUTOMATIC_UPDATER_DISABLED constant in name.
     *
     * This also disables update notification emails. That may change in the future.
     *
     * @since 3.7.0
     *
     * @param bool $disabled Whether the updater should be disabled.
     */
    return apply_filters( \'automatic_updater_disabled\', $disabled );
}
我还建议阅读以下链接:

配置自动后台更新

http://codex.wordpress.org/Configuring_Automatic_Background_Updates

...它详细地提供了可用常量和过滤器的列表,用于细粒度控制针对更新禁用哪些组件。

对于仅禁用自动插件更新的情况,您有:

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

...等等

要回答您的第二个问题

(如果我错了,有人纠正我)

让我们为读者添加一些上下文,整个问题就是由此产生的twitter status 这本身就是对Yoast的WP SEO插件强制自动更新的回应,请参见以下内容,https://yoast.com/wordpress-seo-security-release/, 了解更多信息。

中有一个函数wp-includes/update.php 已命名wp_maybe_auto_update 用相同的名字在钩子上开火do_action(\'wp_maybe_auto_update\') 从内部发射wp_version_check 函数包含在同一文件中,该文件本身是一个计划事件,每天运行两次。

所以,我怀疑WordPress。org做到了这一点,因为他们在内部增加了WordPress的版本,因此由于Yoast WP SEO插件明显存在严重的安全漏洞,用户将被迫进行自动更新。

quote Yoast自己:

由于问题的严重性,WordPress。组织团队发布了强制自动更新(谢谢!)

我不能百分之百确定这是否也会自动更新WordPress中有新版本的任何其他插件。组织存储库或是否WordPress。org可以指定哪些插件可以从其末端自动更新,也许代码中有某种东西也允许这种判断。

至于你是否可以自己使用相同的机制,好吧,对于你在WordPress中托管的插件。是的,对于官方存储库之外的存储库,我不完全确定,但您可以实例化WP_Automatic_Updater 类并为其提供一个要检查的上下文,但我认为最终我们会得到一个名为wp_update_plugins 在内部wp-includes/update.php 对照官方WordPress存储库API进行检查。

我可能不正确,所以如果有人有进一步的补充,请插话。

结束

相关推荐