毋庸置疑WordPress算是当前比较好用的PHP程序,基本上个人博客、企业网站,小型商务网站都可以使用到。而且WordPress官方的更新、第三方的插件主题丰富,让这个程序变得越来越丰富多样,但是随着不断的升级功能,也会增加程序的负担和不安全因素。
比如从WordPress4.4开始增加REST API功能, 对于一般的网站是没有需要的,反而会拖累网站的速度,所以我们尽可能的禁止掉这些不必要的功能需求。我们在源代码中可以看到类似的链接字符。
<link rel=’https://api.w.org/’ href=’http://www.uziwp.com/wp-json/’ />
这里老季将记录下如何解决这个问题的过程,一来需要移除掉这个链接,二来需要禁止REST API功能。
第一、非插件方式
将脚本丢到当前主题的functions.php
文件中。但是,我们会发现链接是去掉了,但是打开wp-josn还是可以看到输出字符。然后老季再启用到一个插件才可以解决。
此外,对于 WP 4.7 以上版本,还有种通过rest_api_init
这个钩子来禁用 REST API 的方法
// 屏蔽 REST API
if (version_compare(get_bloginfo('version'), '4.7', '>=')) {
add_filter('rest_authentication_errors', function(){
add_filter('rest_authentication_errors', function ($result) {
if (true === $result || is_wp_error($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error('rest_cannot_access', __('没有权限'), array('status' => 403));
}
return $result;
});
});
} 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('wp_head', 'rest_output_link_wp_head', 10);
remove_action('template_redirect', 'rest_output_link_header', 11);
/*禁用未登录的用户访问API*/
add_filter('rest_api_init', function(){
if (!is_user_logged_in()) {
wp_die(__('非法操作!'));
}
}, 99);
第二、disable-json-api插件
插件地址:https://wordpress.org/plugins/disable-json-api/
下载和启动插件之后,可以彻底解决输出字符问题。