PHP学习(17) 安全

  本章将介绍一些可能导致不安全的常见问题。如变量、文件名、文件上传以及eval()函数。这其中大多数问题都可以在编码时解决,一些可以通过改变PHP配置解决。

1. 变量
当PHP.ini文件的register_globals打开时,PHP会把POST和cookie自动生成变量。如果变量不初始化,register_globals打开时很容易出现安全问题。如下面的代码,如果打开register_globals的话,用page.php?superuser=1来访问就可以取得管理权限。

1
2
3

if (is_admin()) {
    $superuser = true;
}

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,第十二章 安全

posted @ 2011-07-19 22:55  yutuo  阅读(288)  评论(0编辑  收藏  举报