WordPress安装中的前5个安全漏洞
你的WordPress安装可以像你想要的那样安全或不安全。了解在安全性方面最重要的五件事。
对WordPress安全性的担忧和抱怨并不新鲜。
如果你需要一个内容管理系统,并且恰好咨询的服务提供商不熟悉WordPress,安全性就是你会听到的主要问题。这是否意味着每个人都应该放弃WordPress并切换到静态站点生成器或?
不,因为就像生活中的每个真理一样,这个问题也有许多方面。
WordPress是否非常不安全?
让我们来看看一些建立在WordPress上的大型网站:
- TechCrunch
- The New Yorker
- BBC America
- Bloomberg
- MTV News
- PlayStation Blog
那么,是什么让这些拥有巨额资金和令人难以置信的工作人员的公司不从WordPress切换呢?如果你认为答案是遗留代码,请重新考虑:对于这些公司来说,数据安全和公众形象比简单迁移花费(我估计)不到20万美元更为重要。
显然,他们的工程师知道他们在做什么,也没有看到WordPress存在根本上无法解决的安全问题?
甚至我也有幸管理一个每月接待350-400万访客的WordPress安装。过去八年的安全漏洞总数?零!
那么…WordPress是安全的吗?
很抱歉如果这看起来像个恶作剧,但这是我的答案:
我这么说是因为,就像生活中的每个真理一样,事情并不简单。要得出一个合理的答案,我们首先必须明白WordPress(或任何预构建的内容管理系统)不像一个你把它永久放在某个地方就完事的橱柜。
它是一个复杂的软件,具有许多依赖项:
- PHP,它是用来构建它的语言
- 托管安装的公开可见机器
- 用于处理访问者的Web服务器(Apache,Nginx等)
- 正在使用的数据库(MySQL/MariaDB)
- 主题(PHP,CS和JS文件的捆绑包)
- 插件(PHP,CS和JS文件的捆绑包)
- 以及其他许多,取决于你的安装目标有多少
换句话说,任何这些组件中的安全漏洞都将被称为WordPress漏洞。
如果服务器的根密码是admin123
并且它被攻破了,这是WordPress的安全漏洞吗?
如果PHP版本存在安全漏洞,或者你购买和安装的新插件含有明显的安全漏洞;等等。总结一下:一个子系统失败了,这就是WordPress的安全失败。
顺便提一下,请不要因此认为PHP,MySQL和Apache不安全。每个软件都有漏洞,开源软件的漏洞数量令人震惊(因为它对每个人都是可见和可分析的)。
我们从这次练习中学到的是:
没有任何东西本身安全或不安全。它是由使用的不同组件形成的链条的链接,当然,它的强度取决于它们中最薄弱的环节。从历史上看,WordPress的“不安全”标签是由旧版PHP、共享主机以及从不受信任的来源添加插件/主题共同造成的。
与此同时,一些非常常见的疏忽使你的WordPress安装容易受到知道如何利用它们并且决心的人的攻击。这就是本文要讨论的内容。所以,话不多说(和循环论证),让我们开始吧。
黑客可以利用的WordPress漏洞
WordPress表前缀
著名的5分钟安装是WordPress发生的最好的事情,但像所有安装向导一样,它让我们变得懒惰,并将事情留在默认状态。
这意味着你的WordPress表的默认前缀是wp_
,导致任何人都可以猜到表名:
wp-users
wp-options
wp-posts
现在,考虑一种被称为SQL Injection的攻击方法,恶意数据库查询被巧妙地插入并在WordPress中运行(请注意 – 这绝不是一种仅限于WordPress/PHP的攻击方法)。
虽然WordPress内置了处理这些类型攻击的机制,但无人能保证它不会发生。
因此,如果不知怎么的,攻击者成功运行类似于DROP TABLE wp_users; DROP TABLE wp_posts;
这样的查询,你所有的帐户、配置文件和文章将在瞬间被清除,没有恢复的机会(除非你有备份方案,但即使如此,你也可能会丢失自上次备份以来的数据)。
只需在安装过程中更改前缀就是一件大事(而且不费吹灰之力)。
建议使用类似sdg21g34_
这样的随机前缀,因为它没有意义且难以猜测(前缀越长越好)。最好的部分是,这个前缀不需要记忆,前缀是WordPress会保存的,你永远不必再担心它(就像你不必担心默认的wp_
前缀一样!)。
默认登录网址
你怎么知道一个网站是在运行WordPress?一个显而易见的迹象是当你在网址后面加上“/wp-login.php”时,你会看到WordPress的登录页面。
以我的网站为例(http://ankushthakur.com)。它是否在使用WordPress?好的,试一试加上登录部分。如果你感到太懒,这里是会发生什么:
¯_(ツ)_/¯
WordPress,对吧?
一旦知道这一点,攻击者就可以高兴地开始按字母顺序应用他们的恶作剧了。我真可怜!
解决方案是更改默认登录网址,并只将其提供给受信任的人。
例如,这个网站也使用WordPress,但是如果你访问http://yaoweibin.cn/wp-login.php,你只会感到极度失望。登录网址是隐藏的,只有管理员知道吗?
更改登录网址并不是什么难事。只需使用这个plugin。
恭喜,你刚刚增加了另一层令人沮丧的安全措施来防御brute force attacks。
PHP和Web服务器版本
我们已经讨论过,每一款已经编写(和正在编写)的软件都充满了等待被利用的漏洞。
PHP也是一样。
即使你使用最新版本的PHP,也无法确定存在哪些漏洞可能在一夜之间被发现。解决方案是在浏览器连接时隐藏由Web服务器发送的特定标头(从来没有听说过标头?阅读this!):x-powered-by
。
这是你在你最喜欢的浏览器的开发工具中看到的:
如上所示,网站告诉我们它正在运行Apache 2.4并使用PHP版本5.4.16。
现在,这已经是一堆我们不必要地传递的信息,帮助攻击者缩小他们选择工具的范围。
这些(和类似的)标头需要被隐藏。
幸运的是,这可以很快完成;不幸的是,需要一些复杂的技术知识,因为你需要深入到系统的内部并搞乱重要的文件。因此,我的建议是请你的网站托管提供商为你做这件事;如果他们不行,看看是否有顾问可以完成,不过这将在很大程度上取决于你的网站托管提供商是否有这样的可能性。
如果不起作用,可能是时候换托管提供商或转移到VPS,并雇用安全和管理顾问。
值得吗?只有你自己能决定。🙂
哦,如果你想深入了解安全标头,这是你的fix!
登录尝试次数
黑客手册中最古老的伎俩之一是所谓的Dictionary Attack。
这个想法是,你尝试密码的一个可笑的多(如果可能,数百万)组合,直到其中一个成功。由于计算机在它们所做的事情上速度非常快,这样愚蠢的方案是明智的,并且可以在合理的时间内产生效果。
一个常见(而且非常有效)的防御措施是在显示错误之前添加延迟。这使接收者等待,这意味着如果这是黑客使用的脚本,它将花费太长时间才能完成。这就是为什么你的电脑或喜爱的应用程序会反弹一下,然后说:“哎呀,密码错了!” 的原因。
无论如何,重点是,你应该限制WordPress网站的登录尝试次数。
在一定次数的尝试之后(比如说五次),帐户应该被锁定,只能通过账户持有人的电子邮件进行恢复。
谢天谢地,如果你遇到一个不错的plugin,做到这一点是非常容易的。
HTTP与HTTPS
你的供应商一直在催促你安装SSL证书的重要性可能比你想的要更重要。
它不仅仅是一个声誉工具,可以在浏览器中显示一个绿色的锁图标,显示“安全”;而是安装SSL证书并强制所有URL使用“https”足以将你的网站从一个公开的书籍变成一卷神秘的卷轴。
如果你不明白这是如何发生的,请阅读有关所谓的man-in-the-middle attack的内容。
拦截从电脑到服务器流动的流量的另一种方法是数据包嗅探,这是一种被动的数据收集形式,甚至不需要费力地将自己放在中间。
对于运行在普通的“HTTP”上的网站,拦截网络流量的人,你的密码和信用卡号码将以明文形式显示。
可怕吗?非常可怕!
但是一旦你install an SSL certificate并且所有URL都转换为“https”,这些敏感信息将显示为只有服务器才能解密的乱码。换句话说,不要为这几美元一年烦恼。🙂
结论
将这五个事情控制好,能够有效地保护你的网站吗?
不,一点也不。正如无数的安全文章所说,你永远不会百分之百安全,但是通过合理的努力,可以消除很多这类问题。你可以考虑使用SUCURI cloud WAF来全面保护你的网站。