【IT168 专稿】开源开发工具组合LAMP已经逐渐被众多开发者所使用,尽管它有自己的很多优点,其安全问题却不容轻视。本文将介绍其存在的安全问题,并给出一些安全建议。
Apache HTTP服务器本身具有很高的安全性,至少当它运行在Linux或任何合适的Unix类型操作系统上的时候是如此的。不过,普通的传统静态只读Web站点时代已经过去了;现在我们见到的更多的网站是LAMP支持下的动态Web网站,所谓LAMP,即指Linux操作系统、Apache/Lighttpd Web服务器、MySQL/PostgreSQL/SQLite数据库和Python/PHP/Ruby语言。
就我而言,我还是喜欢普通的静态网页时代,尽管从浏览器兼容性和站点质量上,使用它们的时候存在很多不确定因素,但是至少它们不会因为运行臃肿、低效和充满错误的脚本而拖慢甚至锁定我的整个系统。
OK,有些跑题了,因为这篇文章的主题是如何针对LAMP开发采取合适的安全措施。由于诸如像集成开发环境XAMMP和Ubuntu等Linux版本的存在,以及PHP脚本语言的流行,现在人们在一个周末的时间内,就可以很轻松的安装好一个LAMP组合开发工具,并在其上搭建起一个动态Web站点。但是,这种简单性不一定就是一件好事。我不喜欢在别人的地盘上炫耀,但是所有想在Web编程上精通的朋友,需要花费时间和精力来深入了解他们的LAMP组合开发工具。
任何暴露在互联网上的服务器需要对安全问题特别注意,对于动态Web服务器来说,由于其复杂性这一点显得更加突出。间接破坏的风险是非常高的。今天很多有组织的计算机犯罪一般利用计算机系统的漏洞,恶意软件正是欺骗、欺诈和盗窃等破坏行为的入口之一。它们一般不会攻入你的系统来伤害它们,而是悄悄的盗窃数据并把它们发送到全球范围内的僵尸网络中。
一、PHP安全问题严重
PHP超文本标记语言是导致LAMP不安全的主犯。相对很多主流编程语言,它还比较年轻,它诞生于1997年,依然在向前发展中。PHP所存在的问题主要是三方面:与生俱来的设计缺陷、缺乏经验的程序员和从不打补丁或升级PHP的缺乏维护网站。
当你了解了PHP底层的东西后,你会发现它不是一个非常严谨的语言,其中充满了混乱和矛盾。命名约定、语法和大小写敏感全不一致。它的内置功能中有许多是多余的,实现着非常相似但不完全相同的任务,而且它在文档化方面又做的相当差,因此很多人不确定哪一个功能是实现什么操作。如果不了解其令人痛苦的详细信息,很容易导致程序员在编程中犯错。
PHP看似非常容易学习。从一方面来讲它的确如此;你可以在几个小时以内就学会如何搭建起一个动态网站。但是要真正理解它的不安全因素潜伏的地方以及如何处理它们,可能要花费你数年的时间。其中最常见的安全漏洞之一就是未经验证的输入问题——所有的用户输入应该是不被信任的,但是PHP在这方面没有多少工具来帮助实现这个操作,因此你不得不编写自己的验证程序。
当你通过使用Apache的mod_php来将PHP作为一个模块运行的时候,PHP会继承Apache进程的所有信任。因此,所有可以被Apache读写的事情同样也可以被PHP读写,这意味着一个成功的PHP漏洞会直接被引入到Apache和所有相关的程序中。在一个只有少数用户的简单站点上使用mod_php是没有问题的,但是在一个具有多个用户的共享系统中,它就是带来破坏的导火索,因为所有的脚本运行在相同的Apache用户下。一个可行的选择是在suEXEC或CGIWrap下运行PHP。这些情况同样适用于诸如Perl、Python和Ruby等脚本语言。
现在还有众多网站依然运行在PHP3和PHP4之上,而且有更多的从来没有应用一个补丁修复或安全更新。PHP5在2004年发布,而PHP3则要回溯到1998年。是的,这是一种非常愚蠢和危险的事情,但是,更新到新PHP版本几乎意味着要进行大量的代码重写工作。更有趣的是Apache、PHP和MySQL的版本兼容问题,你必须选择同时选择正确的可以互相兼容的版本,否则它们没法一起配合使用。有一些方法可以实现轻松的全新安装,诸如XAMMP和Ubuntu的LAMP安装包。但是有趣的是,当你尝试更新你的系统的时候,它们不能保持同步。
在我个人观点看来,你最好使用Perl、Python或Ruby语言,虽然在前端编程所花费的时间似乎要多一些,但是却会省去了很多安全和维护之忧。
四步确保安全使用LAMP开源开发工具
0
相关文章