Síða 1 af 2

Búa til upload server

Sent: Mið 22. Maí 2013 11:51
af mikkidan97
Ég er með tilbúinn server með smf, php, mysql, apache2 og keyrir á ubuntu server 12.04 og mig langar að búa til service fyrir notendur mína (bara með php eða html) þar sem þeir geta uploadað skrám eins og bara avatars, mp3 skrár eða bara eitthvað þannig með max size 25 MB per skrá. Ég er kominn með auðkenningar síðu sem notar MySql database fyrir accounta og ég skrái þá bara nafn og password og notandinn getur loggað sig inn.

Var búinn að prufa þetta en það virkaði ekki eins og ég vildi hafa það

Öll hjálp vel þegin :happy

Re: Búa til upload server

Sent: Mið 22. Maí 2013 11:56
af Stutturdreki
Væri ekki bara einfaldast að setja upp FTP server?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 12:17
af mikkidan97
Það eru ekki allir sem kunna að nota ftp (því miður)
og ég var búinn að reyna að nota FTP, en það einfaldlega gekk ekki

Re: Búa til upload server

Sent: Mið 22. Maí 2013 12:31
af rango
Bara áður enn við gerum einhvað, Hvernig ertu að setja Passwd í Mysql?
Nr. 1 2 og 3, Hashaðu lykilorðin.

Ekki nota MD5 eða SHA1, Notaðu frekar SHA2, t.d.

Kóði: Velja allt


hash
('sha512', $pass);


Saltaðu svo lykilorðin og þá getum við talað.

:happy

Re: Búa til upload server

Sent: Mið 22. Maí 2013 12:43
af mikkidan97
rango skrifaði:Bara áður enn við gerum einhvað, Hvernig ertu að setja Passwd í Mysql?
Nr. 1 2 og 3, Hashaðu lykilorðin.

Ekki nota MD5 eða SHA1, Notaðu frekar SHA2, t.d.

Kóði: Velja allt


hash
('sha512', $pass);
 


Saltaðu svo lykilorðin og þá getum við talað.

:happy

Þetta er allt encryptað í drasl, skil ekki alveg sjálfur hvernig, en mér sýnist það vera annaðhvort SHA1 eða 2

Það er ekki auðkenningin sem ég hef áhyggjur af (atm), heldur hvernig notendurnir geta uploadað skránum þeirra ;)

Re: Búa til upload server

Sent: Mið 22. Maí 2013 12:57
af dori
rango skrifaði:Bara áður enn við gerum einhvað, Hvernig ertu að setja Passwd í Mysql?
Nr. 1 2 og 3, Hashaðu lykilorðin.

Ekki nota MD5 eða SHA1, Notaðu frekar SHA2, t.d.

Kóði: Velja allt


hash
('sha512', $pass);


Saltaðu svo lykilorðin og þá getum við talað.

:happy

Stráksi... Hérna notum við bcrypt eða pbkdf2. SHA er crypto hash (hannað til að vera hraðvirkt) en bcrypt og pbkdf2 eru password hash (hönnuð til að taka tíma). Samt hárrétt að salt+hash er nauðsynlegt.

@OP: hvað er það sem virkaði ekki eins og þú vildir hafa það við þetta w3schools dót?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:08
af mikkidan97
Það einfaldlega vildi ekki leyfa mér að uploada skrám...

Ef þú vilt prufa sjálfur http://codw.co.vu/MINE/test

Ég bjó til temporary user: vaktin og pass: vaktin123

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:14
af rango
dori skrifaði:
rango skrifaði:Bara áður enn við gerum einhvað, Hvernig ertu að setja Passwd í Mysql?
Nr. 1 2 og 3, Hashaðu lykilorðin.

Ekki nota MD5 eða SHA1, Notaðu frekar SHA2, t.d.

Kóði: Velja allt


hash
('sha512', $pass);


Saltaðu svo lykilorðin og þá getum við talað.

:happy

Stráksi... Hérna notum við bcrypt eða pbkdf2. SHA er crypto hash (hannað til að vera hraðvirkt) en bcrypt og pbkdf2 eru password hash (hönnuð til að taka tíma). Samt hárrétt að salt+hash er nauðsynlegt.


Veit vel hvað SHA er og í hvað það var hannað, Enn við getum verið sammála um að SHA2 sé öruggara enn SHA1?
Þetta er alveg hárrétt hjá þér með blowfish, Markmiðið með SHA er ekki strong öryggi, Ég nota bcrypt hjá mér.
Ef einhver vill brjóta SHA eða MD5 er þá er það hægt, Enn þarna ertu bara búinn að reisa rafmagnsgirðingu.

Ég var líka að taka tillit til hans mikka, Algjör óþarfi að segja honum að ekkert nema það besta dugi. Eða mér finst það þó svo að það eigi við í öryggi.
Þegar ég byrjaði að læra þetta þá varð ósaltað MD5 fyrir valinu, Shit happens :face

Edit, Pastebin af upload_file.php takk.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:17
af mikkidan97
Pastebin? o.O

Kóði: Velja allt

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png", "mp3");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "audio/mp3"))
&& ($_FILES["file"]["size"] < 100000000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:24
af Stutturdreki

Kóði: Velja allt

Upload: 28a8ab85ff6a1436d03e9d198c6f202923f1b674_full.jpg
Type: image/jpeg
Size: 3.734375 kB
Temp file: /tmp/phpxtyGlI
Stored in: upload/28a8ab85ff6a1436d03e9d198c6f202923f1b674_full.jpg


Kom engin villa?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:26
af mikkidan97
Hvar ætti að koma villa?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:30
af rango
mikkidan97 skrifaði:Pastebin? o.O

Kóði: Velja allt

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png", "mp3");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "audio/mp3"))
&& ($_FILES["file"]["size"] < 100000000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>


Ja eða þú veist orðatiltak, Getur allt eins renamað í .php.txt

villtu setja fyrir mig

Kóði: Velja allt

 var_dump($_FILES["file"]); 


rétt fyrir ofan

Kóði: Velja allt

if ((($_FILES["file"]["type"] == "image/gif")
||
 ($_FILES["file"]["type"] == "image/jpeg")
||
 ($_FILES["file"]["type"] == "image/jpg")
||
 ($_FILES["file"]["type"] == "image/pjpeg")
||
 ($_FILES["file"]["type"] == "image/x-png")
||
 ($_FILES["file"]["type"] == "image/png")
||
 ($_FILES["file"]["type"] == "audio/mp3"))
&&
 ($_FILES["file"]["size"] < 100000000)
&&
 in_array($extension, $allowedExts))


ég fæ

Kóði: Velja allt

array(1) { ["file"]=> array(5) { ["name"]=> string(10) "Status.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(24) "G:\xampp\tmp\php7BC1.tmp" ["error"]=> int(0) ["size"]=> int(251893) } } Upload: Status.png


Þessi if function er að feila og því kemur Invalid file.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:33
af dori
Má ég giska á permission villur?

Also, það er góður siður að geyma skjöl sem eru send inn ekki til hliðar við scipturnar þínar (þú vilt ekki leyfa einhverjum að uploada skrá.php, keyra hana og ná að taka yfir vefþjóninn þinn). Það er líka sniðugt að búa til nýtt nafn fyrir skjöl sem eru send inn (md5 summa af skjalinu + .ext virkar ágætlega í það) og að hafa fall sem býr til slóðina á skránna og setja í breytu (t.d. get_filename("einhver-mynd.jpg") -> "/afvikinn/staður/b861d3166e5b360b60e2325d5fc971a8.jpg") og nota þá breytu alls staðar í stað þess að vera með "upload/" . $name á mörgum stöðum (býr til hættu á villum).

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:36
af mikkidan97
dori skrifaði:Má ég giska á permission villur?

Also, það er góður siður að geyma skjöl sem eru send inn ekki til hliðar við scipturnar þínar (þú vilt ekki leyfa einhverjum að uploada skrá.php, keyra hana og ná að taka yfir vefþjóninn þinn). Það er líka sniðugt að búa til nýtt nafn fyrir skjöl sem eru send inn (md5 summa af skjalinu + .ext virkar ágætlega í það) og að hafa fall sem býr til slóðina á skránna og setja í breytu (t.d. get_filename("einhver-mynd.jpg") -> "/afvikinn/staður/b861d3166e5b360b60e2325d5fc971a8.jpg") og nota þá breytu alls staðar í stað þess að vera með "upload/" . $name á mörgum stöðum (býr til hættu á villum).

Á íslensku takk

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:39
af dori
Eitthvað svona (ef þú ert á linux vél)

cd /www/mikkidan/MINE
chown www-data:www-data uploads
chmod 755 uploads

Augljóslega aðlaga slóð/username/groupname að því sem þú hefur á þínu kerfi.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:42
af rango
dori skrifaði:Má ég giska á permission villur?

Also, það er góður siður að geyma skjöl sem eru send inn ekki til hliðar við scipturnar þínar (þú vilt ekki leyfa einhverjum að uploada skrá.php, keyra hana og ná að taka yfir vefþjóninn þinn). Það er líka sniðugt að búa til nýtt nafn fyrir skjöl sem eru send inn (md5 summa af skjalinu + .ext virkar ágætlega í það) og að hafa fall sem býr til slóðina á skránna og setja í breytu (t.d. get_filename("einhver-mynd.jpg") -> "/afvikinn/staður/b861d3166e5b360b60e2325d5fc971a8.jpg") og nota þá breytu alls staðar í stað þess að vera með "upload/" . $name á mörgum stöðum (býr til hættu á villum).


Ef þetta væri permission villi væri það þá ekki einhvað tengt move_uploaded_file()?

Kóði: Velja allt


Superlongif
(){
   Moves and shit
  
}
else
  {
  echo "Invalid file";
  }
 


Mig grunar $extension ef að $_FILES er ekki empty.

Og ég er 100% sammála þér með Md5, Og t.d. hafa upload í './'
meðan htdocs er í './htdocs/'



mikkidan97 skrifaði:Á íslensku takk

Keyrðu það sem ég sagði þér að keyra takk, Þetta er annars íslenska.
Google translate sannar munin ;)

May I guess Permission errors?

Also, it is good practice to store documents that are not submitted to the side of scipts (you do not want to allow someone to upload skrá.php, run, and manage to take over your server). It's also a good idea to create a new name for the documents that are filed (md5 sum of the file +. Ext works pretty well in it) and have a function that creates a path to the file and set the variable (eg get_filename ("some-image . jpg ") ->" / afvikinn/staður/b861d3166e5b360b60e2325d5fc971a8.jpg ") and use that variable everywhere instead of being a" upload / ". $ name in many places (creates a risk of errors).

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:45
af Stutturdreki
mikkidan97 skrifaði:Hvar ætti að koma villa?

Ef það tókst ekki að uploada skránni hefði maður búist við villu. Miðað við skilaboðin sem ég fékk og php skriptið þá tókst þetta fullkomnlega.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:48
af dori
Ég var að giska á að þetta væri tengt move_uploaded_file. Ég hef ekki hugmynd um hvernig sú aðgerð hegðar sér en ég man eftir skrýtnum og leiðinlegum vandamálum með PHP og upload og illa stillt permissions.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 13:55
af Stutturdreki
move_uploaded_file() skilar bool en það er ekki notað í þessu php scripti til að athuga hvort sú aðgerð tókst yfir höfuð (http://php.net/manual/en/function.move-uploaded-file.php).

Myndi byrja á að setja eitthvað eins og:

Kóði: Velja allt

if(move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"])) {
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
} else {
      echo "access denied";
}

Re: Búa til upload server

Sent: Mið 22. Maí 2013 14:13
af mikkidan97
rango skrifaði:
villtu setja fyrir mig

Kóði: Velja allt

 var_dump($_FILES["file"]); 


rétt fyrir ofan

Kóði: Velja allt

if ((($_FILES["file"]["type"] == "image/gif")
||
 ($_FILES["file"]["type"] == "image/jpeg")
||
 ($_FILES["file"]["type"] == "image/jpg")
||
 ($_FILES["file"]["type"] == "image/pjpeg")
||
 ($_FILES["file"]["type"] == "image/x-png")
||
 ($_FILES["file"]["type"] == "image/png")
||
 ($_FILES["file"]["type"] == "audio/mp3"))
&&
 ($_FILES["file"]["size"] < 100000000)
&&
 in_array($extension, $allowedExts))

[/quote]

Gerði það og fékk:

Kóði: Velja allt

array(5) { ["name"]=> string(12) "Capture1.PNG" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/phpPChAoF" ["error"]=> int(0) ["size"]=> int(909) } Invalid file


Hvernig er hægt að fixa þetta?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 14:33
af dori
"PNG" er ekki það sama og "png" þarft að nota strtolower á $extension.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 15:07
af mikkidan97
Er ekki hægt bara að búa til scriptu sem leyfir alla extensiona en blockar þá sem ég segi henni að blocka (php, html, etc..)?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 15:10
af dori
Það er hægt en ætti að vera augljóst að þú vilt ekki gera slíkt. Leyfðu bara takmarkað set og settu logg færslu ef þú bannar eitthvað. Þannig geturðu fylgst með loggunum og séð hvort það sé eitthvað sem þú ættir að leyfa.

Re: Búa til upload server

Sent: Mið 22. Maí 2013 15:15
af mikkidan97
dori skrifaði:Það er hægt en ætti að vera augljóst að þú vilt ekki gera slíkt. Leyfðu bara takmarkað set og settu logg færslu ef þú bannar eitthvað. Þannig geturðu fylgst með loggunum og séð hvort það sé eitthvað sem þú ættir að leyfa.

Ég kann eiginlega ekkert á php scripting...

Er ekki hægt að fá einhvern til að skrifa svona fyrir sig frítt?

Re: Búa til upload server

Sent: Mið 22. Maí 2013 15:28
af dori
mikkidan97 skrifaði:
dori skrifaði:Það er hægt en ætti að vera augljóst að þú vilt ekki gera slíkt. Leyfðu bara takmarkað set og settu logg færslu ef þú bannar eitthvað. Þannig geturðu fylgst með loggunum og séð hvort það sé eitthvað sem þú ættir að leyfa.

Ég kann eiginlega ekkert á php scripting...

Er ekki hægt að fá einhvern til að skrifa svona fyrir sig frítt?

Yfirleitt er ekki hægt að fá neinn til að gera neitt fyrir sig frítt. Værir þú til í að koma og mála húsið mitt frítt?

Prufaðu þetta annars. Ætti að vera meira verbose og láta þig vita hvað það er sem gerist ekki.

Kóði: Velja allt


<?php
const UPLOAD_PATH 
= "upload/";

$allowedExts = array("gif", "jpeg", "jpg", "png", "mp3");
$allowedMimes = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png", "audio/mp3");
$maxSize = 100000000;

function get_extension($filename)
{
    return strtolower(end(explode(".", $filename)))
}

function get_file_path($file)
{
    return UPLOAD_PATH . md5_file($file["tmp_name"]);
}

$extension = get_extension($_FILES["file"]["name"]);
$mime = $_FILES["file"]["type"];
$size = $_FILES["file"]["size"];
if (!in_array($mime, $allowedMimes))
{
    echo "Restricted mime type: " . $mime;
}
 
elseif 
($size > $maxSize)
{
    echo "File too big (max size " . $maxSize . "): " . $size;
}
elseif (!in_array($extension, $allowedExts))
{
    echo "Restricted extension: " . $extension;
}
else
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    
{
        $path = get_file_path($_FILES["file"]);
        
        echo 
"Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        echo "Dest path: " . $path;

        if (file_exists($path))
        {
            echo $path . " already exists. ";
        }
        else
        
{
            if(move_uploaded_file($_FILES["file"]["tmp_name"], $path))
            {
                echo "Stored " . $_FILES["file"]["name"] . " in: " . $path;
            }
            else
            
{
                echo "Couldn't upload " . $_FILES["file"]["name"];
            }
        }
    }
}
else
{
    echo "Invalid file";
}
?>


Btw. ég hef ekki keyrt þetta, kannski virkar þetta ekki einu sinni. Mörg ár síðan ég fiktaði eitthvað í php af viti.