您现在的位置: 弘智首页 > PHP > PHP语法教程 >

PHP安全之临时文件的安全

时间:2012-10-31 来源:弘智教育 点击: 次

  (一)临时文件简介

  临时文件,顾名思义是临时的文件,文件的生命周期短。

  然而,很多应用的运行都离不开临时文件,临时文件在我们电脑上无处不在,通常有以下几种形式的临时文件:

  文件或图形编辑程序,所生成的中间文件

  数据库查询时,生成的临时缓存文件,提供之前的结果数据而,以减少再次访问数据库的代价;通常用于远程数据库或远程xml的服务

  文件被上传后在服务端的临时储存,其文件名为php的全局变量$_FILES['userfile']['tmp_name']的值

  在http请求中,用于存放session的临时文件,这些文件名通常就是sessionid(如 sess_7483ae44d51fe21353afb671d13f7199)

  在不同应用或相同应用传递数据,而对方要求基于文件的输入,此时用临时文件存放数据

  (二)临时文件的安全特征

  临时文件的最大特征就是它的非持久性,除此之外,从安全性的角度,可以从以下几个方面关注临时文件的其它特点或风险:

  1)位置

  临时文件通常被创建并存放在默认的路径,在一个典型的Linux系统中,至少有两个目录或分区保持着临时文件。其中之一是/tmp目录,再者是 /var/tmp。在更新的Linux内核的系统中,还可能有/dev/shm,它是用tmpfs文件系统装载的。有时临时文件,也可能放在用户home 目录下的隐藏子目录中。使用默认临时文件目录的好处在于,系统进程可以方便查找和读写。

  然而,默认临时文件的存放目录可能成为损害系统安全的僵尸和rootkit的温床。这是因为在多数情况下,任何人(或任何进程)都可以向这些目 录写入东西,有不安全的许可问题。比如我们都知道sticky bit,该位可以理解为防删除位。如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位。设置该位后,就算用户对目录具有写权限,也不能删除该文件。多数Linux发行版本在临时目录上设置sticky位,这意味着用户A不能清除属 于用户B的一个文件,反之亦然。但是,根据文件自身的许可,用户A有可能查看并修改那个文件的内容。

  2)持久

  前面提到临时文件是非持久的,在程序结束时,会被删除,但有的时候临时文件也会被迫持久保存了,没有被删除,如:

  应用程序在关闭前崩溃了,还没有机会删除临时文件

  应用程序还跑着,但操作系统崩溃了

  文件复制过程中由于空间问题而复制失败,导致中间文件没有删除

  操作系统进程通常会定期清空的默认临时文件目录,但可能因为某些原因,而删除失败

  写得不好的应用程序,可能忽略或者忘记了删除临时文件

弘智主页 | 弘智介绍 | 培训课程 | XML地图