[php] - skuteczne filtrowanie danych w uploadzie

0

witam. Wiecie może jak można skutecznie zabezpieczyć upload plików *.php na serwer ?

0

Najprosciej zmieniac im rozszerzenie, sprawdzac czy nie php (jak tak to usuwac) itp.

0

mam taki kod:

$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];
$mime = $_FILES['plik']['type'];

if(strpos($mime, 'image') !== false) {

//właściwy kod uploadu


i nawet to nie zabezpiecza strony przed atakiem

0

Mime mozna oszukac. Sprawdzaj rozszerzenie. Przeciez nawet jak ktos wrzuci php, a serwer zamieni to na jpg, to wpisujac skrypt.jpg go nie uruchomisz :)

0

johny_bravo...a jak sprawdzic rozszerzenie ?

if(strpos($nazwa_pliku, '*.php') !== false) {

echo 'atak';
}

??

0
eregi_replace("\.(php|php4|php3|php5)$", "", $nazwa_pliku);

Spie juz, wiec moga byc drobne problemy z dzialaniem powyzszego :P Ale idea taka - pamietaj, ze to Ty zapisujesz ten plik, wiec to Ty decydujesz jaka bedzie mial nazwe (i rozszerzenie)

0

raczej bez gwiazdki. Poza tym co będzie, jak upne plik .php3, albo - co gorsza .phtml? (czy jaki tam może być wlaczony w php)...

pierwsze - zapisuj tak jak johny mówi (edit: mowił :P, do pliku, którego serwer nie sparsuje - np. zip)

drugie - jak chcesz mieć pewność, że to obrazek, to najlepiej go po wczytaniu przeskaluj do wielkości jaką tam chcesz

0

Już to zadawałem na forum. Link coldpeera. Mam kod do upladu taki:

<?php
$aext = 'jpeg|jpg|gif|png';

if ( !preg_match("/\.(?:$aext)$/i", $_FILES['userfile']['name']))
    die("Nieprawidłowy typ pliku");
if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ) )
{
  $strUploadDir = /upload/ . $_FILES['userfile']['name'];
  if( move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ) )
  {
    echo 'Plik został pomy¶lnie uploadowany! Je¶li był to inny plik niż tapeta, to zostanie automatycznie usunięty. <br />';
  }
  else
  {
    echo 'Upload pliku nie powiódł się!';
  }
  echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . print_r( $_FILES, true ) . '</pre>';
}
else
{
  echo 'Wyst±pił bł±d podczas wysyłania pliku na serwer!';
}
?>

Jeszcze na wszelki wypadek do tego kodu daje

<?php
foreach(glob('tapetki/{*.htm,*.php,*.zip,*.html,*.xml,*.rar,*.php3,*.txt,*.doc,*.wri}', GLOB_BRACE) as $file)
  if($file != '.' && $file != '..')
    unlink($file);
?>

,choć nie wiem po co, jeśli na pewno tam nie bedzie takich plików.

1 użytkowników online, w tym zalogowanych: 0, gości: 1