PHP学习(17) 安全
本章将介绍一些可能导致不安全的常见问题。如变量、文件名、文件上传以及eval()函数。这其中大多数问题都可以在编码时解决,一些可以通过改变PHP配置解决。
1. 变量
当PHP.ini文件的register_globals打开时,PHP会把POST和cookie自动生成变量。如果变量不初始化,register_globals打开时很容易出现安全问题。如下面的代码,如果打开register_globals的话,用page.php?superuser=1来访问就可以取得管理权限。
2. 文件名安全
在打开文件,包含文件时,要注意不能使用用户提交的数据。如:include(“/var/html/$page”);当用户提交的数据$page为../../etc/passwd时就能查看个人密码了
3. 上传文件
上传文件时,文件保存时对浏览器提供的文件名要进行检查,因为在浏览器端修改提交的文件名还是不太难的。
4. 文件权限
在新建文件时,应该先改权限再建文件,而不应该先写文件再改权限。因为在修改权限之前很短的时间里,很可能会被其它人所访问。 应该用unask(077)函数来禁止其它权限。
5. PHP代码函数eval
在使用eval()函数和带/e选项的preg_replace时,如果允许用户数据时,很可能会出安全问题。最好的方法是少用eval。如果一定要用,要注意参数不能为用户提交的数据。同样exec(), system(), popen(), passthru()和``都最好不要用用户提交的数据做为参数。
参考资料:
PHP程序设计,2003,第十二章 安全