PHP是一种非常流行的Web开发语言。在Python、Ruby等语言兴起的今天,PHP仍然是众多开发者所喜爱的选择,在中国尤其如此。
PHP的语法过于灵活,这也给安全工作带来了一些困扰。同时PHP也存在很多历史遗留的安全问题。
在PHP语言诞生之初,互联网安全问题尚不突出,许多今天已知的安全问题在当时并未显现,因此PHP语言设计上一开始并没有过多地考虑安全。时至今日,PHP遗留下来的历史安全问题依然不少,但PHP的开发者与整个PHP社区也想做出一些改变。
PHP语言的安全问题有其自身语言的一些特点,下面我们来介绍一下。
1、文件包含漏洞
严格来说,文件包含漏洞是“代码注入”的一种。“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代表就是文件包含(File In clusion)。文件包含可能会出现在JSP、PHP、ASP等语言中,常见的导致文件包含的函数如下。
- PHP:include(), include_once(), require(), require_once(), fopen(), readfile(), ...
- JSP/Servlet:ava.io.File(), java.io.FileReader(), ...
- ASP:include file, include virtual, ...