torben          Wed Feb  6 20:45:39 2002 EDT

  Modified files:              
    /phpdoc/en/functions        filesystem.xml 
  Log:
  Replaced the userland version of is_uploaded_file() for older versions
  of PHP, except this time in the is_uploaded_file refentry. There are still
  people who have no choice but to run older versions.
  
  
Index: phpdoc/en/functions/filesystem.xml
diff -u phpdoc/en/functions/filesystem.xml:1.115 
phpdoc/en/functions/filesystem.xml:1.116
--- phpdoc/en/functions/filesystem.xml:1.115    Sat Feb  2 10:35:58 2002
+++ phpdoc/en/functions/filesystem.xml  Wed Feb  6 20:45:38 2002
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.115 $ -->
+<!-- $Revision: 1.116 $ -->
  <reference id="ref.filesystem">
   <title>Filesystem functions</title>
   <titleabbrev>Filesystem</titleabbrev>
@@ -1923,15 +1923,10 @@
    </refnamediv>
    <refsect1>
     <title>Description</title>
-     <methodsynopsis>
-      <type>bool</type><methodname>is_uploaded_file</methodname>
-      <methodparam><type>string</type><parameter>filename</parameter></methodparam>
-     </methodsynopsis>
-
-    <para>
-     This function is available only in versions of PHP 3 after PHP
-     3.0.16, and in versions of PHP 4 after 4.0.2.
-    </para>
+    <methodsynopsis>
+     <type>bool</type><methodname>is_uploaded_file</methodname>
+     <methodparam><type>string</type><parameter>filename</parameter></methodparam>
+    </methodsynopsis>
 
     <para>
      Returns &true; if the file named by <varname>filename</varname> was
@@ -1946,6 +1941,43 @@
      that anything done with uploaded files could reveal their
      contents to the user, or even to other users on the same
      system.
+    </para>
+
+    <para>
+     <function>is_uploaded_file</function> is available only in
+     versions of PHP 3 after PHP 3.0.16, and in versions of PHP 4
+     after 4.0.2. If you are stuck using an earlier version, you can
+     use the following function to help protect yourself:
+     <note>
+      <para>
+       This will <emphasis>not</emphasis> work in versions of PHP 4
+       after 4.0.2. It depends on internal functionality of PHP which
+       changed after that version.
+      </para>
+     </note>
+     <programlisting role="php">
+<![CDATA[
+<?php
+/* Userland test for uploaded file. */
+function is_uploaded_file($filename) {
+    if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
+        $tmp_file = dirname(tempnam('', ''));
+    }
+    $tmp_file .= '/' . basename($filename);
+    /* User might have trailing slash in php.ini... */
+    return (ereg_replace('/+', '/', $tmp_file) == $filename);
+}
+
+/* This is how to use it, since you also don't have
+ * move_uploaded_file() in these older versions: */
+if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {
+    copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
+} else {
+    echo "Possible file upload attack: filename '$HTTP_POST_FILES[userfile]'.";
+}
+?>
+]]>
+     </programlisting>
     </para>
 
     <para>


Reply via email to