赞
踩
阅读本文大概需要10分钟。
最近在知乎上刷到一个问题:
下面的回答中,也有很多人有这样的想法:PHP开发的应用安全性不好。
不得不说,这的确是很多人心里的刻板印象,这个刻板印象从2000年代开始,几乎伴随着PHP的成长,直到今天仍有大量安全及运维人员认为PHP开发的网站更容易出现漏洞。
不得不说,这个说法也不是无稽之谈,即使在今天,网络上公开的CMS漏洞、渗透测试报告中,PHP相关应用仍然占据大部分。但是,这和“PHP开发的应用安全性不好”这个结论是没有因果关系的,我今天就来给PHP平反。
1
PHP网站被渗透多代表其不安全?
这个误解就是原提问者的误区,在原回答中,也有不少人找到了一些原因。
PHP语言使用量很大,就像我们不能说世界上每天死掉的人里中国人更多,就说中国人更容易死:
PHP学习成本更低,导致更多水平偏低的人参与PHP应用开发,导致漏洞更多:
PHP开源的网站系统更多,只要出现一个漏洞,就可以拿下一堆网站:
我觉得还有一个原因是,往往使用PHP网站的都是一些站群、非法网站等,渗透这些网站风险更低、回报和性价比更高,所以也让你觉得PHP被渗透的更多:
另外,相比于PHP,Java开发的网站往往用在一些大型企业,而通常渗透成功大型企业的人,不是被抓了就是把漏洞提交给了相关厂商,这导致这些案例也没有流传到外面去,自然你也不知道:
2
PHP语言本身设计的不如其他语言安全吗?
当然,尽管原答案里很多人给PHP打抱不平,也有一些人就是认为PHP的安全性不如其他语言:
这个人认为Java的网站安全性高很多,显然这是另一个误区。
太久以前的情况我们就不说了,就来细数一下这些年影响安全圈的一些比较严重的系列漏洞吧。
Struts2系列漏洞:这个不说了,当年通过S2-016、S2-032、S2-045拿下过多少网站的webshell?其中又有多少是大型企业?
Fastjson系列漏洞:著名开源的json解析工具,最早只要使用json通信即可直接getshell,后来修复绕过修复又绕过又修复,直到今天都没完全解决问题。这个也是影响过多少BAT级别大厂?
Weblogic系列漏洞:Weblogic已经成为安全圈研究者刷成就的一个软柿子了,因为其设计不合理,导致漏洞几乎修不掉,HTTP和T3协议都出现过直接getshell漏洞,且大量国企、外企使用,导致扩大了漏洞影响力
ThinkPHP系列漏洞:ThinkPHP3出现过多个SQL注入漏洞,ThinkPHP5出现过两个代码执行漏洞,之前用来渗透一些非法网站非常有效
Java反序列化系列漏洞:这个也不用说了吧,当时出来以后几乎席卷了所有Java开发的应用,包括WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等等,且很多利用起来几乎无条件,都是直接getshell。
Shiro系列漏洞:今年HW大家可能更喜欢Shiro了吧,也是反序列化导致的直接getshell
你其实可以看看,这里面到底有几个是PHP的?只有一个ThinkPHP吧,但是ThinkPHP在大型企业里用的多吗?对于国家安全、企业安全来讲,究竟是什么语言开发的应用更加不安全?
至于上图中答主说到的Discuz一出来反复被爆,作为一个安全研究者,我不能说这个东西绝对不可能有0day,但是我觉得被爆更可能是你自己的配置问题。
所以其实,PHP的设计在安全上,虽然的确有一些不合理的地方,但绝对不比其他语言更差,特别是Java。
3
PHP的生态环境不如其他语言好吗?
仔细思考一下你会发现,PHP相关CMS出现的安全问题,大部分是开发者的问题,PHP这门语言本身问题就那么些,这些年已经慢慢都废弃了。
而Java,反序列化、JNDI注入、RMI漏洞等等,这些都是Java这门语言自身的设计问题(当然这些年Java也在慢慢改进),有时候你即使按照开发规范开发,也可能会出现严重的安全漏洞。
所以,如果你是一个开发人员,你只要好好学习安全开发规范,使用Laravel、Symfony等现代开发框架开发PHP应用,可以认为出现低级漏洞的可能性很小,完全不必担心。
有人提到了PHP生态的几个硬伤:
webshell那一段的确有道理,PHP这种部署方式的确给getshell带来了极大的便利,但其实这也不是只有PHP独有的特点,JSP和ASPX的默认部署方式也存在类似的问题,这些是答主不知道还是假装不懂?
PHP很长时间没有预编译支持,这个“很长时间”指的是PHP 4吗?mysqli是PHP 5.0就有了,PDO是PHP 5.1就有了,不知道为什么有那么多人认为“PHP很长时间没有预编译支持”,是不是你们以为PHP 7废弃了mysql系列函数才代表新引入了预编译?
最后一个就是无稽之谈了,“前后端不分离”是PHP发明的?PHP不能做前后端分离?PHP有自带的模板引擎?
不过我认为PHP生态下的确有很多问题,包括很多人不用预编译、不用安全的模板引擎,但是这些缺点的影响,我觉得不如Java的那些缺点影响更大。很多人用springboot做的应用来和纯PHP开发的应用做比较,这个我觉得是不公平的。
最后,我个人其实也更喜欢渗透PHP开发的应用,但是我承认这是因为我水平有限,很多Java开发的应用源码很复杂,我挖不到漏洞,而不是因为PHP的安全性更差。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。