PHP学习(17) 安全

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

1. 变量

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

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

转载请注明:宇托的狗窝 » PHP学习(17) 安全

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址