bool is_uploaded_file ( string $filename )
如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。 我的问题是:
$_FILES['userfile']['tmp_name']应该是服务器这边处理得到的吧,用户如何通过欺骗脚本来修改这个值?

解决方案 »

  1.   

    有时候文件上传过程中出错了,比如超过upload_max_filesize限制, 那么 $_FILES['userfile']['tmp_name'] 就是一个空的字符串了,
    在这个时候这个函数才有点用处,就是类似于 is_file() 。
    没听说过有 用户通过欺骗脚本来修改这个值 这样的攻击。
      

  2.   

    is_uploaded_file 这个函数从 PHP 3 >= 3.0.17, PHP 4 >= 4.0.3 就有了
    现在还存在,只是为了向下兼容当 php.ini 中设置 register_globals = on 时,这个函数就具有了他本身的意义
    在这个条件下,input type=file name=userfile
    提交后 $userfile 就是上传后的临时文件
    而 http://localhost/file.php?userfile=xxx
    也可用 $userfile 取到
    这时就有判断是否为上传文件的必要了遗憾的是,php5 默认 register_globals = off,并建议不要打开;php5.4.1已经没有这个开关了。你想利用他来做手脚,已经是不可能了