在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

禁用WordPress程序REST API功能

PHP 清风 151℃ 0评论

本博客点使用PHP的一套出名的应用,那就是WordPress。站点建立完成后就有针对登录的暴力破解,很多都应该都是随机的用户名尝试,那个时候也就没有做任何处理。过一段时间发现,真正的用户名已被发现,经过了解发现是WordPress站点一个功能,可以暴露用户名。如下请求:

/?author=1

/author/admin

这个问题解决使用方法也很简单,因为一开始就使用了 redirections ,索性就直接用301重定向。到这里这个问题是解决了。很奇怪登录失败列表还是存在真实用户名,最后发现是WordPress应用的API问题。这太扯淡了,没有权限验证用户API就能获得登录用户名。

/wp-json/wp/v2/users

WordPress 4.4 默认集成了备受关注的 JSON REST API,这个对于开发者来说,无疑是非常有用的,通过 JSON REST API 可以在外部程序中很方便地调用 WordPress 网站的数据,比如可以用来制作app程序等。

但是,对于大多数用户来说,这个功能是几乎用不到的了,JSON REST API 采用 GET 请求方式来获取数据,这个为 DDOS 攻击提供了一个新的攻击途径,就像 XML-RPC 接口一样 。

解决方案

使用非插件方式解决

将下面代码添加到主题functions.php文件中,去除head里面输出的链接信息。


if ( version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
    function lxtx_disable_rest_api( $access ) {
        return new WP_Error( 'rest_api_cannot_acess', '无访问权限', array( 'status' => rest_authorization_required_code() ) );
    }
    add_filter( 'rest_authentication_errors', 'lxtx_disable_rest_api' );
} else {
    // Filters for WP-API version 1.x
    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );
    // Filters for WP-API version 2.x
    add_filter( 'rest_enabled', '__return_false' );
    add_filter( 'rest_jsonp_enabled', '__return_false' );
}
// 移除头部 wp-json 标签和 HTTP header 中的 link
remove_action('template_redirect', 'rest_output_link_header', 11 );
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');

还可以通过rest_api_init这个钩子来禁用 REST API 的方法


add_filter( 'rest_api_init', 'lxtx_rest_only_for_authorized_users', 99 );
function lxtx_rest_only_for_authorized_users($wp_rest_server){
    if ( !is_user_logged_in() ) {
        wp_die('非法操作!');
    }
}

插件方式解决

在插件安装那里搜索 disable-json-api ,安装启动即可 。

插件不需要修改任何代码即可使用,方便快捷,但在一定程度上可能影响站点性能。需要自己取舍!!

转载请注明:清风博客 » 禁用WordPress程序REST API功能

喜欢 (2)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址