手动覆盖更新 WordPress 程序和插件

操作背景

最近从国内访问 wordpress.org 会提示 “429 Too Many Requests”, 而且,由于 WordPress 程序和插件更新时默认都是从 wordpress.org 下载文件,所以更新 WordPress 程序和插件时也是提示 “Too Many Requests”, 无法完成更新。但是,为了站点的安全,必须保持程序版本是较新的,因此只能手动更新。

以下是具体操作过程。

准备工作

在 WordPress 中文官网下载所需版本的 WordPress 程序和 WordPress 插件:

https://cn.wordpress.org

通过 FTP 或者 Wget 将上述文件上传到服务器。

手动更新 WordPress 程序

解压 wordpress 程序压缩包。

首先,删除该压缩包中的 wp-content 文件夹及文件,因为该文件夹中保存的是我们上传的媒体文件,安装的插件等,是 WordPress 程序本身不包含的数据,不能被覆盖:

rm -rf wp-content/

将当前站点目录中的 wp-content 文件夹及文件复制一份做备份:

cp -p -R wp-content/ /var/www/html/bak/

开始覆盖:

注:使用下面的命令执行覆盖操作过程中可能会产生大量询问是否确认覆盖的提示信息,解决方案在这里

cp -R -f wordpress/* /var/www/html/wordpress/

覆盖操作完成后,再次登陆 WordPress 会提示“需要升级数据库”:

图 1

点击“升级WordPress数据库”按钮即可完成数据库的升级:

图 2

点击“继续”按钮即可回到 WordPress 管理后台,至此,对 WordPress 程序的手动覆盖升级已完成。

手动更新 WordPress 插件

WordPress 的插件都安装在 wp-content/plugins 目录下。

首先,在 WordPress 的管理后台中停用需要更新的插件,并删除该插件。

之后,将下载的插件程序解压并移动到 wp-content/plugins 目录下。最后,在管理后台中启用该插件即可。

备注

手动更新操作具有一定的风险性,更新之前请务必确保已完成数据库备份,网站文件备份,硬盘镜像备份等保障措施,确保一旦有关操作执行效果未达到预期可以在较短时间内回滚数据,恢复到执行更新操作之前的状态。

EOF

CentOS 7 中 Apache 服务器禁止目录浏览

操作环境

服务器操作系统:CentOS 7
Web 中间件:Apache 2

问题说明

今天对网站进行安全检查的时候,发现了一个名为 “Index of /wordpress” 的网页。打开一看,竟然可以进行目录浏览

图 1

这是一个很危险的漏洞,几乎把荒原之梦的所有网站文件的名称都公开显示了。

解决步骤

修改相关目录的权限:

chmod 755 -R wordpress/

修改 Apache 的配置文件,进入如下目录:

/etc/httpd/conf

修改配置文件

vim httpd.conf

找到 Options Indexes FollowSymLinks, 将其注释掉并修改为:

Options None

保存并退出后,重启 Apache 服务器:

systemctl restart httpd

之后,刷新具有目录浏览问题的页面可以发现,已经无法进行目录浏览:

图 2

EOF

代码方式设置WordPress内所有URL链接都在新标签页打开

前言:
WordPress默认情况下几乎所有URL链接都是在同一个标签页打开。这样的话,读者点击一个链接就会离开当前页面,如果读者想要查看原来的页面又要进行返回操作,在某些情况下用户体验不佳。但是,如果一个一个单独为每个链接添加新标签页打开的代码,工作量会很大,也容易造成遗漏。本文就介绍一种通过一次添加代码的操作,达到全站链接都在新标签页打开的方法。

继续阅读“代码方式设置WordPress内所有URL链接都在新标签页打开”

解决CentOS 7中php-fpm进程数过多导致服务器内存资源消耗较大的问题

前言:

最近服务器内存使用率一直居高不下,检查之后发现可能和php-fpm进程数过多有关。本文记录了我优化php-fpm配置文件的过程并补充了一些和php-fpm有关的知识。

继续阅读“解决CentOS 7中php-fpm进程数过多导致服务器内存资源消耗较大的问题”

在基于Windows系统的PHP虚拟主机上实现域名的301永久重定向

作者:荒原之梦

操作背景:

当网站在更换或添加域名、进行网址规范化或删除旧页面时,出于对用户使用体验和搜索引擎优化方面的考虑就需要进行301永久重定向。

操作环境:

PHP环境的Windows系统虚拟主机。

操作原理:

本文所介绍的301永久重定向是通过ISAPI_Rewrite这个用于IIS的URL重写组件实现的,关于ISAPI_Rewrite的更多信息可以参见:
1 ISAPI_REWRITE百度百科:Here
2 ISAPI_Rewrite 3 – Apache .htaccess mod_rewrite compatible module for IIS :Here

具体步骤如下:

1 新建一个文本文档,输入以下内容:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP

#将daohanggou.wang重定向到daohanggou.cn
RewriteCond Host: ^daohanggou\.wang$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]

#将www.daohanggou.wang重定向到daohanggou.cn
RewriteCond Host: www\.daohanggou\.wang$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]

#将www.daohanggou.cn重定向到daohanggou.cn
RewriteCond Host: www\.daohanggou\.cn$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]
2 将该文件上传到虚拟主机的web 目录(有的虚拟主机中相应目录的名称为public_html ),重命名为httpd.ini .
之后可以通过http状态查询工具检测301重定向是否成功。
注:上述方法不需要虚拟主机支持伪静态。

000webhost虚拟主机绑定自定义二级域名

作者:荒原之梦

前言:

最近想给导航狗IT信息导航做一个文件服务器专门存放文件,以提供引用或下载。于是,我在000webhost上申请了一台免费虚拟主机,并给这个虚拟主机空间绑定了一个导航狗的二级域名files.daohanggou.wang .
000webhost提供两种绑定域名的方式,分别是”Park domain”和”Point domain”. 根据000webhost官网的介绍,这两种设置自定义域名的方式适用的情景如下:
Park domain – Park domain to 000webhost nameservers. When you want to access your website without www (Recommended)
Point domain – Have a domain name, but do not want to change namservers. When you want to have full control of your DNS zone
经测试,Park domain的方式无法绑定二级域名,下面是使用Point domain的方式绑定自定义二级域名的过程。

前期准备:

1 拥有一个顶级域名

本文中使用的域名是在阿里云(万网)注册的。
阿里云网址:https://www.aliyun.com

2 拥有一台虚拟主机

本文中使用的是在000webhost注册的免费虚拟主机。
000webhost网址:https://www.000webhost.com

具体步骤如下:

1 设置解析

登陆阿里云,依次打开:
“控制台->域名与网站(万网)->域名”
找到我们要设置二级域名的顶级域名,点击“解析->添加解析”。
解析参数如下:
记录类型:CNAME "将域名指向另外一个域名"
主机纪录:files "这里根据你想设置的二级域名的名字填写"
解析路线:默认
记录值: "填写000webhost提供的免费二级域名"
TTL值:10分钟

2 添加域名

登陆000webhost,点击”Set web address”
这时会弹出一个提示你购买域名的窗口,由于我们希望绑定自己已有的二级域名,所以点击”It’s OK, I don’t mind 000webhost branding”
之后,我们会看到”Own domain”和”Buy domain”两个按钮, 点击”Own domain”默认的是进行”Park Domain”操作,但是Park domain并不支持绑定二级域名,而且如果要绑定顶级域名还需要将域名的DNS服务器设置成000webhost提供的DNS服务器。所以,我们向下滚动页面,找到”Add domain”,点击打开,选中”Point domain”, 在”Domain”的输入框里填入第一步设置好解析的二级域名,例如:
files.daohanggou.wang
点击”Save”
至此,自定义的二级域名已经绑定了虚拟主机,可以使用自定义二级域名访问了,例如:
文件服务器-导航狗IT信息导航:http://files.daohanggou.wang/

RedHat 7.0及CentOS 7.0禁止Ping的三种方法(附:ICMP数值类型与功能表)

作者:荒原之梦
前言:
“Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存时间,网络延迟等信息,而且响应Ping请求也会消耗服务器资源。因此,在服务器上禁用ICMP响应可以尽可能的隐藏服务器在Internet上的踪迹,降低受攻击面。本文介绍三种方法禁用(或启用)ICMP响应,即禁止(或允许)Ping.

操作环境:

RedHat 7.0(CentOS 7.0的操作方法与此一致)

方法一 临时禁用ICMP协议

修改文件/proc/sys/net/ipv4/icmp_echo_ignore_all 的值。
切换到root,输入命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这样就将/proc/sys/net/ipv4/icmp_echo_ignore_all 文件里面的 0 临时改为了1 ,从而实现禁止ICMP报文的所有请求,达到禁止Ping的效果,网络中的其他主机Ping该主机时会显示“请求超时”,但该服务器此时是可以Ping其他主机的。
如果想启用ICMP响应,则输入:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
注0:由于/proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件是只读的,即使我们使用root用户登陆,vim打开/proc/sys/net/ipv4/icmp_echo_ignore_all ,将里面的 0 该为1 之后使用qw! 强制保存也无法完成修改。因此上面这个方法只是临时的,一旦服务器重启就又会回到默认的 0 状态(假设修改前/proc/sys/net/ipv4/icmp_echo_ignore_all 里面的值就是 0 )。如果想永久修改(当然也可以改回来,只是不再受服务器关机或重启的影响)请使用方法二或方法三。

方法二 永久禁用ICMP协议:

禁用ICMP协议,输入:
vim /etc/sysctl.conf
添加一条信息:
net.ipv4.icmp_echo_ignore_all = 1
保存并退出。
输入:
sysctl -p
使配置生效。
启用ICMP协议,输入:
vim /etc/sysctl.conf
将:
net.ipv4.icmp_echo_ignore_all = 1
修改为:
net.ipv4.icmp_echo_ignore_all = 0
如果没有net.ipv4.icmp_echo_ignore_all = 1 就添加:
net.ipv4.icmp_echo_ignore_all = 0
保存并退出。
输入:
sysctl -p
使配置生效。
注1:如果想启用ICMP响应,不能直接在/etc/sysctl.conf 里删除net.ipv4.icmp_echo_ignore_all = 1 之后sysctl -p . 这样做仍然是禁止Ping的状态,此时使用命令:vim /proc/sys/net/ipv4/icmp_echo_ignore_all 查看发现其值仍然是1 , 即仍处于拒绝ICMP响应的状态。

方法三 配置IPTABLES防火墙

Iptables防火墙是集成于Linux内核的IP信息包过滤系统。方法三不能和上面的方法一和方法二组合使用。即,在使用方法三时不能已经使用方法一或方法二禁止了Ping.
禁止Ping,输入:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
停止禁用Ping,输入:
iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

上面两条命令的简要解释:

-A:添加防火墙规则.
INPUT:入站规则.
-p icmp:指定包检查的协议为ICMP协议.
--icmp-type 8:指定ICMP类型为8(关于ICMP类型与数值的对应关系和功能,见注3).
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
-j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.
注2:由于方法三是对防火墙进行的设置,所以使用方法三禁止Ping后只会阻止来自外网的Ping请求,内网主机的Ping请求仍然会正常响应。使用方法一和方法二禁止Ping后不仅会阻止外网的Ping请求也会阻止内网的Ping请求。
注3:ICMP数值类型与功能表
Type
Code
Description
Query
Error
0
0
Echo Reply
x
3
0
Network Unreachable
x
3
1
Host Unreachable
x
3
2
Protocol Unreachable
x
3
3
Port Unreachable
x
3
4
Fragmentation needed but no frag. bit set
x
3
5
Source routing failed
x
3
6
Destination network unknown
x
3
7
Destination host unknown
x
3
8
Source host isolated (obsolete)
x
3
9
Destination network administratively prohibited
x
3
10
Destination host administratively prohibited
x
3
11
Network unreachable for TOS
x
3
12
Host unreachable for TOS
x
3
13
Communication administratively prohibited by filtering
x
3
14
Host precedence violation
x
3
15
Precedence cutoff in effect
x
4
0
Source quench
5
0
Redirect for network
5
1
Redirect for host
5
2
Redirect for TOS and network
5
3
Redirect for TOS and host
8
0
Echo request
x
9
0
Router advertisement
10
0
Route solicitation
11
0
TTL equals 0 during transit
x
11
1
TTL equals 0 during reassembly
x
12
0
IP header bad (catchall error)
x
12
1
Required options missing
x
13
0
Timestamp request (obsolete)
x
14
Timestamp reply (obsolete)
x
15
0
Information request (obsolete)
x
16
0
Information reply (obsolete)
x
17
0
Address mask request
x
18
0
Address mask reply

修改WordPress后台默认登陆地址提高网站安全性

作者:荒原之梦
 
安装完WordPress后,默认的登陆地址就是:
http://XXX.XXX/wordpress/wp-admin/
(其中”XXX.XXX”表示你的网站域名)
由于这个时候网站后台登陆地址相当于是公开的,所以就很容易受到攻击,例如暴力破解。
下面我们通过在WordPress的默认登陆地址后面添加一段标记代码的方法防止发生这种情况。
 

具体步骤如下:

 

1 打开当前使用的WordPress主题中的functions.php文件

 
在末尾加上代码:
 
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
    if($_GET['master'] != 'hello')header('Location: https://XXX.XXX');  
}

2 保存并退出

 
1 其中master(标记信息) 、hello(标记信息) 和XXX.XXX(网址) 都可以自定义。
2 URL是区分大小写字母的,所以设置标记信息时大小写字母和数字都可以使用(参见:HTML and URLs )。
3 由于URL编码中特殊字符一般都有专用含义,所以如果标记信息中使用了特殊字符需要确认一下是否能正常登陆。
 
这样WordPress后台的登陆地址就变成了:

 

http://www.XXX.XXX/wordpress/wp-login.php?master=hello
 
由于网站安装目录不同,如果上述地址无法登陆,可以尝试使用下面的地址登陆

 

http://www.XXX.XXX/wp-login.php?master=hello
 
这样一来,如果登陆地址错误就会跳转到XXX.XXX .
如果https://XXX.XXX 是你的网站的首页,那么就会跳转到首页。

解决WordPress用户名密码都正确但点击登陆就清空密码的问题

作者:荒原之梦

问题产生的环境与问题描述:

今天我在浏览器的书签里将我保存的用于登陆WordPress的书签名字改了一下,之后再登陆WordPress就出现提示说Cookies被阻止,要启用Cookies,但是启用了Cookies后再输入账号和密码进行登陆却发现一点击“登陆”按钮,密码就会被清空而且无法登陆。

解决办法:

将登陆地址由:
http://zhaokaifeng.com/wordpress/wp-admin/
改为:
http://zhaokaifeng.com/wordpress/wp-admin/index.php
之后换了一个浏览器重新在:
http://zhaokaifeng.com/wordpress/wp-admin/
登陆,发现可以正常登陆。
至此,问题解决,尚未发现异常。

使用Coding Pages托管网站

作者:荒原之梦

Coding官网:https://coding.net

Coding Pages官网页面:https://coding.net/pages/

具体过程如下:

1 注册Coding账户

可以先使用邮箱注册,之后再绑定手机号(如果不想升级成银牌会员也可以不绑定手机号)。

2 完善资料,升级成银牌会员

普通会员没有自定义域名的权限,银牌会员可以绑定自定义域名。

3 创建一个项目

图 1

项目名称一栏填写:

username.coding.me

其中username 必须是当前Coding账号的用户名。

项目属性设置为私有 。

勾选启用README.md文件初始化项目 复选框。

点击创建项目 。

4 上传网页文件

点击代码->上传文件 开始上传网页文件。

选中并打开网页文件。

填写提交说明 。

点击提交到master分支 。

提交代码时,不会上传文件夹。因此如果本地中在一个文件夹里面还有其他文件夹,要注意单独上传这些文件夹里面的内容,如果其他文件中引用了该文件夹中的内容要注意修改路径。

5 开启Coding Pages服务

Pages服务提供有“静态Pages”和“动态Pages”两种模式,下面的过程使用的是静态Pages.

点击Pages服务 。

部署来源 中选中master分支点击保存 。

这时我们就可以看到Coding Pages成功运行的提示:

图 2

6 绑定自定义域名

Coding帮助文档:绑定自定义域名

在域名注册商的域名管理页面将自己购买的域名的CNAME 记录到pages.coding.me .

图 3

图 4

添加解析记录时要添加@www 两个主机纪录,绑定域名时也要绑定XXX.XXX 和WWW.XXX.XXX 两个。这是为了保证无论用户在输入我们的网址时是否输入了www. 都可以打开网站。如果不添加www 主机纪录,输入WWW.XXX.XXX 是打不开我们的网站的。

图 5
图 5

Pages服务 页面分别将XXX.XXX 和WWW.XXX.XX 输入自定义域名 框,点击绑定 。

图 6

www.daohanggou.wang 是“完全限定域名FQDN”(即“网址”),而dohanggou.wang 是“域名”。

7 开启强制HTTPS访问

使用HTTPS加密传输网站文件可以在很大程度上防止中间人攻击。为了最大程度的确保全站HTTPS加密,网站中使用的外链也应该是HTTPS加密的URL,例如图片的URL。

8 添加Hosted by Coding Pages信息

Hosted by Coding Pages有文字版和图片版两种,文字版代码如下:

<p>Hosted by <a href="https://pages.coding.me" style="font-weight: bold">Coding Pages</a></p>

如果没有购买Coding会员,可以将上面的代码(或Hosted by Coding Pages图片)添加到网站首页,之后选中已放置 Hosted by Coding Pages 复选框就会自动提交审核,如果审核通过则我们的Coding Pages在被访问时就不会加载Pages跳转页。