upload files schützen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • upload files schützen

    moin,

    habe folgendes zu lösen:

    ich schreibe gerade ein tool, mit dem man u.a. beliebige files hochladen kann.
    jetzt habe ich vor, diese files zu schützen. es kann ja sein, dass jemand ein php file hochlädt und es wäre ja net so gut, wenn man das 1:1 kopiert mit dateiendung .php.

    zunächst habe ich halt einfach .dummy angehangen. würde auch reichen, jedoch habe ich da noch ein skript, mit dem man files includen kann. diese files müssen zwar auf dem server liegen, da es aber nun diese upload funktion gibt, könnte man das upgeloadete file damit einbinden und code ausführen.

    meine idee war jetzt, statt .dummy an jedes uploadfile .php dranzuhängen und in dem phpfile dann eine variable einzubauen an die der content des uploadfiles übergeben wird.

    was aber bei binär dateien wohl nicht ohne weiteres geht.

    hier der code zu der methode:

    beim speichern:
    PHP-Code:
    $contents = "<?php\\n\\$contents='" . addslashes( $data ) . "';\n?>"; // da sollten noch ein paar backslashes drin sein, aber die ziehen hier alle raus! code is ok!
    beim auslesen:
    PHP-Code:
    include_once( "admin/SiteBlaster/i/" $name ".php" );
    echo 
    stripslashes$contents ); 
    das klappt bei plain/text files wunderbar, jedoch nicht bei binärdateien.

    danach habe ich das probiert, was zwar funktioniert, aber megalahm ist:

    beim speichern:
    PHP-Code:
    $contents = "<?php\\n\\$contents='" . bin2hex( $data ) . "';\n?>";
    beim auslesen:
    PHP-Code:
    include_once( "admin/SiteBlaster/i/" $name ".php" );
    echo 
    _hex2bin$contents ); 
    das ist natürrlich voll lahm und deshalb die frage, ob einer von euch nicht ne coolere methode kennt?

    vielen dank!

    gruss,
    beebob
    Zuletzt geändert von beebob; 13.01.2004, 16:38.

  • #2
    du bisch mir ja ein schlaumeier was glaubst du passiert, wenn einer ein .psd hochlädt, und das per include einliest? warum legst du nicht fest was included werden darf und was nicht? dann kann auch nix passieren ...
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      schlaumeier? nee, du hast das nicht richtig verstanden...

      Kommentar


      • #4
        nachtrag bringt auch nix. man kann auch in ner .txt php code einbauen. der wird auch ausgeführt ...
        also ned include sondern fopen oder file()
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          lol, lies dir das mal bitte richtig durch...

          Kommentar


          • #6
            Original geschrieben von beebob
            schlaumeier? nee, du hast das nicht richtig verstanden...
            oder du hast es falsch erklärt
            h.a.n.d.
            Schmalle

            http://impressed.by
            http://blog.schmalenberger.it



            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
            ... nur ohne :-)

            Kommentar


            • #7
              vielleicht hilft dir ja das:

              incoming...
              PHP-Code:
              $fp = @fopen( $tmppath, "rb" );
              $data = @fread( $fp, $theFile[ "size" ] );
              @fclose( $fp );
              @unlink( $tmppath );
                                                      
              $contents = "<?php\n\$contents='" . bin2hex( $data ) . "';\n?>";
                                                      
              $fp = @fopen( $fullpath, "wb+" );
              @fwrite( $fp, $contents );
              @fclose( $fp );
              'outcoming':
              PHP-Code:
              header"Cache-Control: no-cache, must-revalidate" );
              header"Pragma: no-cache" );
              header"Content-Type: $type;" );
              header"Content-Length: $size);
              header"Content-Disposition: $disposition; filename=$name);

              include_once( 
              "admin/SiteBlaster/i/" $name ".php" );
              echo 
              _hex2bin$contents ); 
              der kann hochladen, was der will, da das uploadfile zu ner php datei mit einer variable 'umgewandelt' wird, kann der das file includen, aber nix ausführen...

              Kommentar


              • #8
                Original geschrieben von beebob
                'outcoming'
                OffTopic:
                also entweder heisst das outgoing, oder coming out.
                was davon du jetzt vorhast, weiss ich nicht *g*
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  HAHAHAHAHAHA, mit urlencode() klappt das auch bei binaries HAHAHAHA


                  hier gehts rein
                  PHP-Code:
                  // adding '.dummy' for preventing to upload files that may be executed by webserver
                                                  $fullpath = "admin/SiteBlaster/i/" . $theFile[ "name" ] . ".php";
                                                  $tmppath  = "admin/SiteBlaster/i/" . $theFile[ "name" ] . ".tmp";
                                              
                                                  if( !@file_exists( $fullpath ) )
                                                  {
                                                      if( !@move_uploaded_file( $theFile[ "tmp_name" ], $tmppath ) )
                                                      {
                                                          if( strlen( $theFile[ "name" ] ) == 0 )
                                                          {
                                                              $this->message .= _UPLOAD_WARNING . ": " . $key . " is empty!" . $this->br;
                                                          }
                                                          else
                                                          {
                                                              $this->message .= _UPLOAD_WARNING . ": " . $theFile[ "name" ] . $this->br;
                                                          }
                                                      }
                                                      else
                                                      {
                                                          $fp = @fopen( $tmppath, "rb" );
                                                          $data = @fread( $fp, $theFile[ "size" ] );
                                                          @fclose( $fp );
                                                          @unlink( $tmppath );
                                                          
                                                          $contents = "<?php\n\$content='" . urlencode( $data ) . "';\n?>";
                                                          
                                                          $fp = @fopen( $fullpath, "wb+" );
                                                          @fwrite( $fp, $contents );
                                                          @fclose( $fp );
                                                          
                                                          $file_input .= $key . "=" . "name:" . htmlentities( urlencode( $theFile[ "name" ] ) ) . ",type:" . htmlentities( urlencode( $theFile[ "type" ] ) ) . ",size:" . htmlentities( urlencode( $theFile[ "size" ] ) ) . "&";
                                                      }
                                                  }
                                                  else
                                                  {
                                                      // if the file already exists, keep the information
                                                      $file_input .= $key . "=" . "name:" . htmlentities( urlencode( $theFile[ "name" ] ) ) . ",type:" . htmlentities( urlencode( $theFile[ "type" ] ) ) . ",size:" . htmlentities( urlencode( $theFile[ "size" ] ) ) . "&";
                                                      $this->message .= _FILES_EXISTS . ": " . $theFile[ "name" ] . $this->br;
                                                  }
                  hier gehts raus:
                  PHP-Code:
                  function getDataSheet$sheetname$language "" )
                  {
                      
                  $xdb = new DB_Sql;
                      
                      
                  $xdb->query"SELECT sheetdata FROM " _DBPREFIX "_siteblaster_datasheets"
                                   
                  ." WHERE"
                                   
                  ." sheetname='$sheetname'"
                                   
                  ." AND"
                                   
                  ." language='$language';" );
                                       
                      if( 
                  $xdb->next_record() )
                      {
                          
                  $content = array();
                          
                  parse_str$xdb->f"sheetdata" ), $content );
                          return 
                  $content;
                      }
                      else
                      {
                          return array();    
                      }
                  }

                  if( 
                  _getVar"inline" ) == "yes" )
                  {
                      
                  $disposition "inline";    
                  }
                  else
                  {
                      
                  $disposition "attachment";    
                  }

                  $sheetdata getDataSheet_getVar("sheetname"), _getVar("language_select") );
                  $theFile $sheetdata_getVar"fname" ) ];

                  $arr explode","$theFile );
                  $arr_cnt count$arr );
                  $fname "";
                                          
                  for( 
                  $j 0$j $arr_cnt$j++ )
                  {
                      
                  $arr2 explode":"$arr[$j] );
                                              
                      if( 
                  $arr2] == "name" )
                      {
                          
                  $name $arr2];
                      }
                      else if( 
                  $arr2] == "type" )
                      {
                          
                  $type $arr2];
                      }
                      else if( 
                  $arr2] == "size" )
                      {
                          
                  $size$arr2];
                      }
                  }

                  header"Cache-Control: no-cache, must-revalidate" );
                  header"Pragma: no-cache" );
                  header"Content-Type: $type;" );
                  header"Content-Length: $size);
                  header"Content-Disposition: $disposition; filename=$name);

                  include( 
                  "admin/SiteBlaster/i/" $name ".php" );
                  echo 
                  urldecode$content ); 

                  Kommentar


                  • #10
                    ist zwar doppelt so schnell als mit _hex2bin aber immer noch zu lahm ...

                    Kommentar


                    • #11
                      so, base64_encode() is mein freund

                      5% cpu auslastung bei nem athlon 2400er und nem file von 64mb is ok...

                      jetzt kann man halt hochladen was man will, der content wird in einer variablen in einem php file gespeichert.

                      bei der ausgabe mach ich dann schlicht ein echo über die variable, die den file content beinhaltet. dann kann kein böser, böser code eingeschleust werden...

                      Kommentar

                      Lädt...
                      X