首页 » 建站技术 » PHP 技术 » 浏览内容

is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的


2005-05-17 09:27:52 4,083 0 发表评论 字体: 作者:C.K.

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

is_uploaded_file

(PHP 3>= 3.0.17, PHP 4 >= 4.0.3)

is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的

说明

bool is_uploaded_file ( string filename)

如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

is_uploaded_file() 仅可用于 PHP 3 的 3.0.16 版之后,以及 PHP 4 的 4.0.2 版之后。如果你执意要用老版本,可以用下面的函数来保护自己:

注: 以下例子不能用于 PHP 4 的 4.0.2 版之后。它依赖的 PHP 内部函数在该版本之后改变了。

<font color="#000000"><font color="#0000bb"><?php<br /></font><font color="#ff8000">/* Userland test for uploaded file. */<br /></font><font color="#007700">function </font><font color="#0000bb">is_uploaded_file</font><font color="#007700">(</font><font color="#0000bb">$filename</font><font color="#007700">) {<br />    if (!</font><font color="#0000bb">$tmp_file </font><font color="#007700">= </font><font color="#0000bb">get_cfg_var</font><font color="#007700">(</font><font color="#dd0000">&#39;upload_tmp_dir&#39;</font><font color="#007700">)) {<br />        </font><font color="#0000bb">$tmp_file </font><font color="#007700">= </font><font color="#0000bb">dirname</font><font color="#007700">(</font><font color="#0000bb">tempnam</font><font color="#007700">(</font><font color="#dd0000">&#39;&#39;</font><font color="#007700">, </font><font color="#dd0000">&#39;&#39;</font><font color="#007700">));<br />    }<br />    </font><font color="#0000bb">$tmp_file </font><font color="#007700">.= </font><font color="#dd0000">&#39;/&#39; </font><font color="#007700">. </font><font color="#0000bb">basename</font><font color="#007700">(</font><font color="#0000bb">$filename</font><font color="#007700">);<br />    </font><font color="#ff8000">/* User might have trailing slash in php.ini... */<br />    </font><font color="#007700">return (</font><font color="#0000bb">ereg_replace</font><font color="#007700">(</font><font color="#dd0000">&#39;/+&#39;</font><font color="#007700">, </font><font color="#dd0000">&#39;/&#39;</font><font color="#007700">, </font><font color="#0000bb">$tmp_file</font><font color="#007700">) == </font><font color="#0000bb">$filename</font><font color="#007700">);<br />}<br /><br /></font><font color="#ff8000">/* This is how to use it, since you also don&#39;t have<br />* <font style="BACKGROUND-COLOR: #316ac5" color="#ffffff">move_uploaded_file</font>() in these older versions: */<br /></font><font color="#007700">if (</font><font color="#0000bb">is_uploaded_file</font><font color="#007700">(</font><font color="#0000bb">$HTTP_POST_FILES</font><font color="#007700">[</font><font color="#dd0000">&#39;userfile&#39;</font><font color="#007700">])) {<br />    </font><font color="#0000bb">copy</font><font color="#007700">(</font><font color="#0000bb">$HTTP_POST_FILES</font><font color="#007700">[</font><font color="#dd0000">&#39;userfile&#39;</font><font color="#007700">], </font><font color="#dd0000">"/place/to/put/uploaded/file"</font><font color="#007700">);<br />} else {<br />    echo </font><font color="#dd0000">"Possible file upload attack: filename &#39;$HTTP_POST_FILES[userfile]&#39;."</font><font color="#007700">;<br />}<br /></font><font color="#0000bb">?></font> </font>

网站统计 Statistics

  • 创建时间: 2005年1月3日 距今5063 天
  • 日志总数: 2461
  • 评论总数: 630
  • 标签总数: 654
  • 链接总数: 273
  • 最后更新: 2018-8-31 17:57:04
  • 您是本站第 14151107 位访客

广告区 Guǎng Gào