“如何处理被黑的wordpress”一文的解释

wordpress的市场占有率很高,但被黑的很多,今天看了“如何处理被黑的wordpress”一文,下面做个解释说明。

被黑后的操作步骤:

一、备份文件及数据库

对于wordpress,文件只需要备份wp-content 下的文件即可,因为你上传的文件都再这个下面

被黑后,原已安装的wordpress文件很有可能已被篡改,所以备份只需备份wp-content下的用户文件,最主要的是上传文件。

二、修改相关密码

  • mysql数据库密码,如果是cpanel,请cpanel删除数据库用户名,然后新建同名用户即可完成密码的修改

  • FTP/cpanel后台管理密码;

  • WP 管理员用户密码;

被入侵后,很有可能保存帐号信息的wp-config.php的内容已泄漏,所以,我们必须修改密码,要修改的密码就包括上了上面三个主要内容。进入cpanel进行删除重建用户是为了更加安全,同时,你也可以检查是否有异常用户名。

三、全新安装 WordPress

1.进 cpanel 后台修改管理员密码,新建全新数据库,新建数据库用户名;

2.把 FTP 备份下到本地后,清空服务器 pulic_html/ 内所有文件,到 http://wordpress.org/ 下载最新版程序(不下中文版,你懂的!),解压到服务器中;

3.访问博客在线安装 WordPress ,新建用户名,修改数据库默认的 wp_ 前缀为 home_ (homez 自己命名一个);

在备份完成后,就可以重新安装wordpress了。在重新安装前,先重建数据库及相关帐号,清空网站目录下所有文件。这里需要注意的是,不要遗漏隐藏文件,比如.htaccess。当然,也可以把public_html目录删除,再重新建立这个目录。

下载最新的wordpress,wordpress老版中的漏洞很多,很容易被黑。

在线安装wordpress的步骤中,有一步中有数据库中表的前缀,缺省为 wp_ ,为安全,必须修改。因为在sql注入入侵时,得猜数据库中的表名,改为一个攻击者不容易猜出来的,当然最好不要用网站名称,比如homezz网站的数据库表前缀就不要用wp或homezz了:-)

四、恢复 SQL 数据:

1.进 phpMyAdmin ,除 mywpcommentmeta、mywpoption、mywpusermeta、mywpusers 不删,其余表全删;

2.导入备份下来的 SQL 到新建的数据库,删除以上 4 个表;

3.记得你刚刚修改过数据表的,所以,记得再phpmyadmin里面修改

这里就是导入你的数据了,需要注意这四个表的数据不要用备份里的数据,因为我们已经使用了全新的帐号了。注意表名前缀的变化。

五、插件、主题及其它文件恢复

1.推荐 WP 后台搜索安装;

2.若要使用备份中的插件、主题,请务必仔细查看各个文件;

3.其它文件回传时请查看是否有新增可疑文件;

插件和主題一定要重新从官方重新下载最新版。如果是自己写得,检查文件内容是否已被篡改再回传。

搜索引擎的一次比较-2

搜索引擎的一次比较因为前面一部分图片多了点,就分成两部分了,“搜索引擎的一次比较-1”主要是截图,这里主要进行内容比较。

一、搜索结果质量

这里的搜索结果质量比较仅针对我搜索一本理论书的ISDN的结果而言,并不全面,这里也只比较第一页的结果。

  • google:结果很精准,从图书的出版社到相关理论课程等完全满足我的要求。

  • baidu:结果对我有帮助,可能因为结果中主要是英文网页,所以收录的条目比较少。

  • Yandex:结果对我有帮助,能搜索出相关理论和使用此书的课程网页。

  • Bing:结果对我有帮助,能搜索出相关理论和出版社网页,但众多结果链接中其实只有两条命中。

  • soso:能给出一些类似ISDN的结果,但很遗憾,没有此书结果。

  • so(360搜索):类似soso,能给出一些类似ISDN的结果,但没有此书结果。

  • sogou:类似soso,能给出一些类似IDSN的结果,但没有命中。

搜索结果排序,google最好,baidu和Yandex不错,bing凑合,soso、so和sogou还有较长的路要走。

二、搜索结果条目数量

搜索结果的数量其实没有过多意义,我们需要的是有效结果,一般也就翻看前几页内容,搜索引擎一般给出的搜索结果统计数字也是估计数。

  • google:30,600。

  • baidu:11。

  • Yandex:11。

  • Bing:584,000。

  • soso:14,342,993。

  • so(360搜索):100,000。

  • sogou:16,569。

如果从有效结果和总数量的比较来看的话,soso是最糟的,最多的结果,但一条都没命中;数量第二多的是bing,但其实只命中两条;360搜索的估计结果数字可能是硬编码;-)。

三、另一类搜索结果展示比较

一般来说,搜索引擎主要是从自已采集的网页中找到最可能符合用户要求的内容。但有时可能只想了解一些更直接的简单结果信息,比如股价、期货价格、公式、汇率转换、翻译或天气等。虽然不是搜索引擎最重要的内容,但可以给搜索引擎增加不少趣味性和实用性。

在这里,虽然搜索的是图书的IDSN编号,但因为其格式为“978-3-642-14278-9”,所以也可以认为这是一个简单的四则运算,所以不少搜索引擎会在网页搜索结果的最前面给出一个运算结果,并顺便给出一个计算器。这也是这次搜索引擎比较的由来。

  • google:给出了一个素雅而专业的计算器,并把运算式子自动输入进计算器并给出结果。

  • baidu:直接给出运算式子的结果,并给一个缺省是收起来的华丽计算器,使用得自己点开,计算有两种模式,标准和高级。不过有些遗憾得是,并没有把运算式子自动输入计算器,如果我们需要对结果进一步运算,还得多进行几次操作。

  • Yandex:无。

  • Bing:无。

  • soso:有一个简洁实用的计算器,自动将运算式子输入并给出结果。

  • so(360搜索):无。

  • sogou:直接给出运算式子的结果,并给出一个有两模式(标准和专业)的计算器。类似baidu,也没有把运算式子自动输入计算器。sogou的在线计算器两种模式下大小变化过大,这点baidu就设计得好得多。

以上就是针对一个ISDN的搜索结果的比较,可以看出google仍然是搜索引擎最棒的;baidu有了很大进步,国内搜索引擎中baidu 的确可以说是最好的;bing处于可有可无的地步;Yandex仍保持水准;soso水份太多;so(360搜索)还要努力;sogou也许应该换个好点的美工。

搜索引擎的一次比较-1

看到一本书,随手就在google上搜索了一把ISDN,谷歌的结果一下引起了我的兴趣,因为出现了一个素雅的计算器。如图

google搜索结果

当然搜索结果是我需要的,我输入的ISDN的格式是"978-3-642-14278-9",理解成一个算术运算也很正常。但这个计算器提醒了我google存在已久的一个功能,直接计算运算结果的功能,同时这个计算器也方便进行后继计算。

一时好奇,就对google,baidu,soso,so,yandex,bing和sogou都进行了一次搜索,下面就是搜索结果图。

- 阅读剩余部分 -

gethostbyname已被getaddrinfo替换

需要从域名解析地址,临时查了一下msdn 和man 手册,这才发现,原来用了N年的gethostbyname 已经是obsolete 的函数了,都标记成DEPRECATED 了,无论是windows 下还是linux 下都建议使用getaddrinfo 来替代它。

gethostbyname函数的原型如下:

struct hostent* FAR gethostbyname(
  _In_  const char *name
);

之前使用gethostbyname 很简单,类似这样:

struct hostent *remoteHost;
struct in_addr addr;

if ( ( remoteHost = gethostbyname( hostname ) ) == NULL ){
    xxxx;
}
else{
    if (remoteHost->h_addrtype == AF_INET)
    {
        while (remoteHost->h_addr_list[i] != 0) {
            addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
            printf("\tIP Address #%d: %s\n", i, inet_ntoa(addr));
        }
    }
}

现在得用getaddrinfo,其原型如下:

int WSAAPI getaddrinfo(
  _In_opt_  PCSTR pNodeName,
  _In_opt_  PCSTR pServiceName,
  _In_opt_  const ADDRINFOA *pHints,
  _Out_     PADDRINFOA *ppResult
);

得这么用:

struct addrinfo *result = NULL;
struct addrinfo *ptr = NULL;
struct addrinfo hints;

ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;

dwRetval = getaddrinfo(hostname, 0, &hints, &result);
if ( dwRetval != 0 ) {
    xxxx;
}
else{
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

    printf("getaddrinfo response %d\n", i++);
    printf("\tFlags: 0x%x\n", ptr->ai_flags);
    printf("\tFamily: ");
    switch (ptr->ai_family) {
        case AF_UNSPEC:
            printf("Unspecified\n");
            break;
        case AF_INET:
            printf("AF_INET (IPv4)\n");
            sockaddr_ipv4 = (struct sockaddr_in *) ptr->ai_addr;
            printf("\tIPv4 address %s\n",
                inet_ntoa(sockaddr_ipv4->sin_addr) );
            break;
        case AF_INET6:
            printf("AF_INET6 (IPv6)\n");
            // the InetNtop function is available on Windows Vista and later
            // sockaddr_ipv6 = (struct sockaddr_in6 *) ptr->ai_addr;
            // printf("\tIPv6 address %s\n",
            //    InetNtop(AF_INET6, &sockaddr_ipv6->sin6_addr, ipstringbuffer, 46) );

            // We use WSAAddressToString since it is supported on Windows XP and later
            sockaddr_ip = (LPSOCKADDR) ptr->ai_addr;
            // The buffer length is changed by each call to WSAAddresstoString
            // So we need to set it for each iteration through the loop for safety
            ipbufferlength = 46;
            iRetval = WSAAddressToString(sockaddr_ip, (DWORD) ptr->ai_addrlen, NULL, 
                ipstringbuffer, &ipbufferlength );
            if (iRetval)
                printf("WSAAddressToString failed with %u\n", WSAGetLastError() );
            else    
                printf("\tIPv6 address %s\n", ipstringbuffer);
            break;
        case AF_NETBIOS:
            printf("AF_NETBIOS (NetBIOS)\n");
            break;
        default:
            printf("Other %ld\n", ptr->ai_family);
            break;
    }
}

看起来更复杂了,不过的确更灵活了。

IRC常用命令

试着用AVPlayer装了一个QQ机器人,并把QQ群和irc 频道绑定在一起。这样可以通过irc频道做一些机器人的维护管理工作。

好久没用IRC了,大部分命令细节都快忘记了。所以这里小结一下,方便自己以后查询。

所有的命令都是以最常用的Freenode上的服务器为例,网上大多数老的irc资料的命令已经不被支持了。以下命令都是大小写无关的。

1. 注册帐号

首先设置好自己的昵称后,选择chat.freenode.net登录,然后注册自己的昵称。

/msg NickServ REGISTER password youremail@maildomain.com

注册后,freenode会发一填充验证邮件到你的邮箱,里面有一条命令,复制出来输入irc命令窗口确定就完成了注册。

如果不幸你选择的昵称别人已经用了,可以用

/nick newnickname

来换一个。

注册完成后,以后就可以用你的昵称登录了,登录后,需要用命令认证一下你的身份

/msg NickServ IDENTIFY nickname password

如果一直只用一个昵称,可以省掉昵称参数,也就是这样

/msg NickServ IDENTIFY password

注册完,我们一般还会对自己的昵称做一个保护:

/msg NickServ SET ENFORCE ON

告诉服务器,这个昵称我用了,不要再允许别人用了,哪怕我不在线,这样可以避免有人在你不在线时用你的昵称假冒你。

2. 建立一个频道Channel

建立一个独立的频道可以最大程度上避免别人的干扰,也可以免得干扰别人。

创建频道使用:

/msg ChanServ REGISTER #channelname

注意,使用这条命令前,先进入这个频道

/j #channelname

然后再创建。如果别人已拥有了这个频道,那就换个频道名现创建吧。

创建完,如果不能保证总是在线,可以让频道服务机器人帮你守着,避免长时间没人服务器把频道收回了。

/msg ChanServ SET #channelname GUARD ON

这样,有个叫ChanServ的机器人就会长驻这个频道了。不要担心它会泄漏你的聊天信息,这只是一个系统机器人。

3. 频道Channel管理

IRC的频道管理功能很丰富,可以使用帮助

/msg chanServ help

来查看频道管理所支持的所有命令和参数。

下面为了省事,我们可以用 /cs 来替代 /msg ChanServ ,也就是这两者效果是一样的。

修改频道标题:

/cs topic #channelname newtopic

给某人管理权限:

/cs op #channelname somebody

这也就是俗称的带帽子。

我们也可以一次赋多个权限权给某个用户:

cs flags #channelname somebody +voAti

后面的标志 +voAti 的意思就是增加发言权、管理权限、访问权限列表、频道标题管理、和邀请权。如果要去除某个权限使用减号就行了。