Wp-cron.php是否存在已知漏洞?

时间:2015-01-29 作者:kanenas

我正在使用WordPress v.4.1 所有插件和主题都是最新的。

我在我的日志文件中看到了太多的这些。。。

xxx.xxx.xxx.xxx - - [02/Jan/2015:13:30:27 +0200] "POST /wp-cron.php?doing_wp_cron=1420198227.5184459686279296875000 HTTP/1.0" 200 - "-" "WordPress/217; http://www.example.com"
在哪里xxx.xxx.xxx.xxx 是网站所在服务器的IP地址,并且“http://www.example.com“是我的网站。

是否存在影响wp cron的已知漏洞(漏洞)。php<有没有办法“保护”文件?

非常感谢。

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

在里面wp-includes/default-filters.php 我们可以找到回调注册:

// WP Cron
if ( !defined( \'DOING_CRON\' ) )
    add_action( \'init\', \'wp_cron\' );
如果我们去函数wp_cron() 现在,我们看到:

$schedules = wp_get_schedules();
foreach ( $crons as $timestamp => $cronhooks ) {
    if ( $timestamp > $gmt_time ) break;
    foreach ( (array) $cronhooks as $hook => $args ) {
        if ( isset($schedules[$hook][\'callback\']) && !call_user_func( $schedules[$hook][\'callback\'] ) )
            continue;
        spawn_cron( $gmt_time );
        break 2;
    }
}
spawn_cron() 发送您在日志中看到的POST请求:

$doing_wp_cron = sprintf( \'%.22F\', $gmt_time );
set_transient( \'doing_cron\', $doing_wp_cron );

/**
 * Filter the cron request arguments.
 *
 * @since 3.5.0
 *
 * @param array $cron_request_array {
 *     An array of cron request URL arguments.
 *
 *     @type string $url  The cron request URL.
 *     @type int    $key  The 22 digit GMT microtime.
 *     @type array  $args {
 *         An array of cron request arguments.
 *
 *         @type int  $timeout   The request timeout in seconds. Default .01 seconds.
 *         @type bool $blocking  Whether to set blocking for the request. Default false.
 *         @type bool $sslverify Whether SSL should be verified for the request. Default false.
 *     }
 * }
 */
$cron_request = apply_filters( \'cron_request\', array(
    \'url\'  => add_query_arg( \'doing_wp_cron\', $doing_wp_cron, site_url( \'wp-cron.php\' ) ),
    \'key\'  => $doing_wp_cron,
    \'args\' => array(
        \'timeout\'   => 0.01,
        \'blocking\'  => false,
        /** This filter is documented in wp-includes/class-http.php */
        \'sslverify\' => apply_filters( \'https_local_ssl_verify\', false )
    )
) );

wp_remote_post( $cron_request[\'url\'], $cron_request[\'args\'] );
在这里,您还可以看到浮点数的来源:它作为参数传递,以标识瞬态。

没什么好担心的。

SO网友:I\'m Root James

如果要保护文件,可以通过httpd限制对文件的访问。conf(全局Apache配置文件)。

# Wordpress wp-cron.php file
<Files "wp-cron.php">
  Require ip 1.2.3.4
</Files>
将示例中的IP替换为服务器IP。这仍然允许您使用以下命令从服务器访问文件:

wget -q -O - domain.com/wp-cron.php?doing_wp_cron
它将返回403(拒绝访问任何其他IP的请求)。如果使用下面这样的附加规则,您将重定向来自403 Forbidden 转到另一个页面(如主页),这实际上是不必要的。

ErrorDocument 403 https://www.domain.ca
更好的是,您可以使用Require ip 127.0.0.1 使用上述示例并使用wget请求:wget -q -O - 127.0.0.1/wp-cron.php?doing_wp_cron. 这将使用环回网络控制器,您的请求不会被转发到公共internet并返回。

结束

相关推荐

如果第一次运行wp-cron.php花费的时间太长,运行两次是否安全?

假设我在WP配置中禁用了“DISABLE\\u WP\\u CRON”。php可以运行wp cron吗。php两次重叠?我有时注意到wp cron。php需要几分钟。我会花整整一个小时,但我的博主整天都在做很多安排,她很忙。比如说我每10分钟用一个真正的crontab运行一次*/10***等。它需要整整15分钟的时间来做生意。15分钟只是一个随机的例子。这花了多长时间,似乎没有任何押韵或理由。可以创建两个wp cron“实例”。php一起安全运行?最旧的实例是否已死亡,而新实例是否已接管?从运行wp-cr