Avatar billede dytti Novice
14. maj 2010 - 14:13 Der er 7 kommentarer og
1 løsning

MP3 upload sikkerhed

Til en side hvor brugere har mulighed for at uploade deres hjemmelavede musik, har jeg lavet flg. lille script.

Til det har jeg et par spørgsmål:
1. Hvordan sikre jeg mig, at brugerne KUN uploader MP3 filer, og intet andet?

2. Findes der en måde at opnå hurtigere upload?
Siden virker, men det tager mellem 5-10 min at uploade ca. 4 mb.
Jeg har leget lidt med at uploade fra siden via FTP, men har endnu ikke fået det til at virke.

Her er Formen:
<form method="post" action="uptrack.php" enctype="multipart/form-data">
  <p>Musik tittel:<br>
    <input type="text" name="tracktittel"/>
  </p>
  <p>Musik stil:<br>
    <input type="text" name="trackstyle"/>
  </p>
  <p>Musik l&aelig;ngde (ca.):<br>
    <select name="time">
      <option value="Time">Time </option>
      <option value="01">01</option>
      <option value="02">02</option>
      <option value="03">03</option>
      <option value="04">04</option>
      <option value="05">05</option>
      <option value="06">06</option>
      <option value="07">07</option>
      <option value="08">08</option>
      <option value="09">09</option>
      <option value="10">10</option>
      <option value="11">11</option>
      <option value="12">12</option>
      <option value="13">13</option>
      <option value="14">14</option>
      <option value="15">15</option>
      <option value="16">16</option>
      <option value="17">17</option>
      <option value="18">18</option>
      <option value="19">19</option>
      <option value="20">20</option>
      <option value="21">21</option>
      <option value="22">22</option>
      <option value="23">23</option>
      <option value="24">24</option>
    </select>
    -
    <select name="minut">
      <option value="Minutter">Minutter</option>
      <option value="00">00</option>
      <option value="05">05</option>
      <option value="10">10</option>
      <option value="15">15</option>
      <option value="20">20</option>
      <option value="25">25</option>
      <option value="30">30</option>
      <option value="35">35</option>
      <option value="40">40</option>
      <option value="45">45</option>
      <option value="50">50</option>
      <option value="55">55</option>
    </select>
    <br>
    <br>
    <font color="#FF0000">Tracks m&aring; kun v&aelig;re af typen &quot;MP3&quot;
    og m&aring; kun v&aelig;re hjemmelavede.<br>
    Fors&oslash;g p&aring; upload af andre filtyper, vil medf&oslash;re udelukkelse
    fra xxxx.dk. </font></p>
 
  <input type="hidden" name="user" value="<?php echo $session->username; ?>">
  <input type="hidden" name="timestamp" value="<?php echo time(); ?>">
  <input name="userfile" type="file" id="userfile">
  <br><br>
Kort beskrivelse af Track:: <br>
<textarea rows="10" cols="35" name="tracktext">
</textarea>
  <br/> <br>
<input TYPE="submit" name="upload"  value="Upload Track"/>
          </form>

***********************

Her er PHP:
<?php
include("LS2/include/session.php");
?>

<?php
$uploadDir = 'upload/';

if(isset($_POST['upload']))

{

//Informationerne fra formen
$tittel = $_POST['tracktittel'];
$style = $_POST['trackstyle'];
$time = $_POST['time'];
$min = $_POST['minut'];
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$text = $_POST['tracktext'];
$user = $_POST['user'];
$timestamp = $_POST['timestamp']; 

$filePath = $uploadDir . $fileName;


//smid info i databasen
$query = "INSERT INTO tracks (tittel, style, time, min, name, size, type, text, user, timestamp)
VALUES ('$tittel', '$style', '$time', '$min', '$fileName', '$fileSize', '$fileType', '$text', '$user', '$timestamp')";


$result = move_uploaded_file($tmpName, $filePath);
if (!$result)
{
echo "Fejl med upload";
exit;
}

include 'config.php';
include 'opendb.php';

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}


mysql_query($query) or die('Error, query failed : ' . mysql_error());

include 'closedb.php';

echo "<br>Filer er uploadet<br>";

}
?>


Håber i har nogle ideer.
Avatar billede showsource Seniormester
14. maj 2010 - 16:05 #1
well, upload afhænger jo af brugerens forbindelse, og serverens forbindelse.

Nu det er noget musik noget, så prøv at kikke her:
http://dk.php.net/manual/en/refs.utilspec.audio.php

Måske du kan bruge det til noget.
Avatar billede intenz Novice
14. maj 2010 - 20:00 #2
Omkring upload hastigheden kan du også overveje at bruge et 'flash upload' script. Det gør ikke hastigheden hurtigere, men gør at brugeren kan se hvor langt den er nået, hvilket er lidt mere brugervenligt.

F.eks.
http://www.swfupload.org/

Der findes også andre hvis du søger på google.
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 00:22 #3
ganske almen upload på php er max 6mb perfil mener jeg og max 20mb i en session.

men sådan ganske simpelt:

/* File Checking */
if ($_FILES['mp3']['size'] > 5242880)
die(over 5 mb - er du sindsyg i din hovede maaan?');

if ($_FILES['mp3']['type'] == "audio/mpeg3");
{
// mp3
}
else {
die ('Fy Fy ikke MP3');
}
/* File Checked */

men hensyn til hastighed afhænger det af brugerens forbindelse - serverens forbindelse - så det kan du kun ændre ved at få dem til at opgradere deres net.
Avatar billede erikjacobsen Ekspert
15. maj 2010 - 00:29 #4
Nej, nej, nej til

  if ($_FILES['mp3']['type'] == "audio/mpeg3");

Enhver hacker med IQ > 56 kan uploade en "hack.php" med mimetype 'audio/mpeg3'. Kommer den fil til at ligge direkte tilgængelig, som man kunne forestille sig en mp3-fil ville, så har han direkte adgang til alt på det pågældende website via "hack.php".

Mimetype sættes nemlig af klienten (browseren), og kan derfor ændres.

Løsningen er at checke på extension, eller selv bestemme filnavnet og extension.
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 00:50 #5
unbdskyld hr. Erik.

så retter jeg ovenstående fra "ganske simpelt" til - "ganske ubrugeligt" hvis dit system er åbent for alle til at oprette sig og smide junk op.

som Erik selv siger.

move_uploaded_file($mp3, $uploads_mappe."/".$filnavn.".mp3");

du kan såmen også læse filen igennem med et script for at se om der er tegn på injection.
og man kan også checke op på om filen er for lille og så videre - der er mange løsninger, men find en der passer til dig - er det en lukket bruger gruppe - så behøver du ik gå op i al den sikkerhed så længe dit login er iorden.
Avatar billede dytti Novice
15. maj 2010 - 17:21 #6
Nu har jeg leget lidt med det der flash upload, og der er ingen tvivl om, at det er den vej jeg skal.

Jeg har lavet denne her: http://www.onlinedj.dk/uploader/index.php

Desværre fatter jeg hat af det (endnu).
Jeg kan simpelhen ikke få det til at uploade dels til mysql database og dels til en folder på serveren.

Anyway - vil nogen ha point, må de lige smide et svar, så takker og lukker jeg.
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 17:25 #7
du kan jo oprette en ny tråd om uploaderen og så kan vi prøve kigge på den også
Avatar billede dytti Novice
16. maj 2010 - 11:06 #8
Så vil jeg takke, og lukke her.
(opretter en ny tråd om uploaderen)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester