Afbeelding wordt geupload zonder bestandstype

  • Onderwerp starter Onderwerp starter Nie
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Nie

Gebruiker
Lid geworden
20 aug 2012
Berichten
12
Ik heb een formulier waarmee je een item in een datbase kan stoppen + een scan, alles werkt alleen kan ik de afbeelding nadien niet meer downloaden. Als ik ze handmatig wil opslaan worden ze opgeslaan als een .txt bestand.
Hopelijk snappen jullie het, nogal moeilijk uit te leggen.

Dit is mijn bestand:
PHP:
<?php

session_start(); // Starts the session.
include("config.php"); // Contains header etc.
include("header.php"); // Contains header etc.
include("menu.php"); // Contains header etc.
include("where.php"); // Contains header etc.

$sql_sets = "SELECT * FROM  `sets` ORDER BY `release` ASC";
$result_sets=mysql_query($sql_sets); 

 if (!isset($_POST['submit'])) {

?>

<!-- ####################################################################################################### -->
<div id="container">
  <div class="wrapper">
    <h1>Add a new card</h1>
    <p>Here on this page you can insert a new card in our database, your card will be visible for everybody when a moderator has controlled it.</p>

    <p><form action="addcard.php" method="POST" ENCTYPE="multipart/form-data">
<table>
<tr>
<td width="50%">Language:</td><td width="50%"><SELECT NAME="language">
<OPTION VALUE="" SELECTED>Select</OPTION>
<OPTION VALUE="English">English</OPTION>
<OPTION VALUE="Japanese">Japanese</OPTION>
<OPTION VALUE="Dutch">Dutch</OPTION>
<OPTION VALUE="French">French</OPTION>
<OPTION VALUE="German">German</OPTION>
<OPTION VALUE="Italian">Italian</OPTION>
<OPTION VALUE="Korean">Korean</OPTION>
<OPTION VALUE="Portugese">Portugese</OPTION>
<OPTION VALUE="Spanish">Spanish</OPTION>
<OPTION VALUE="Other">Don't know</OPTION>
</SELECT>
</tr>
<tr>
<td width="50%">Set:</td><td width="50%"><SELECT NAME="set">
<OPTION VALUE="" SELECTED>Select</OPTION>
<?php
while($rijquery=mysql_fetch_array($result_sets))
            {
?>
      <OPTION VALUE="<?php echo $rijquery['name'];?>">(<?php echo $rijquery['lang'];?>) <?php echo $rijquery['prefix'];?> - <?php echo $rijquery['name'];?></OPTION>

<?php
} 
?>
<OPTION VALUE="Other">Not in list</OPTION>
<OPTION VALUE="Other">Don't know</OPTION>
</SELECT>
</tr>
<tr>
<td width="50%">Name:</td><td width="50%"><input name="name" size="18" type="text" />
</tr>
<tr>
<td width="50%">Number:</td><td width="50%"><input name="number" size="18" type="text" />
</tr>
<tr>
<td width="50%">Kind:</td><td width="50%"><SELECT NAME="kind">
<OPTION VALUE="" SELECTED>Select</OPTION>
<OPTION VALUE="Basic Energy">Basic Energy</OPTION>
<OPTION VALUE="Special Energy">Special Energy</OPTION>
</SELECT>
</tr>
<tr>
<td width="50%">Print:</td><td width="50%"><SELECT NAME="print">
<OPTION VALUE="" SELECTED>Select</OPTION>
<OPTION VALUE="Normal">Normal</OPTION>
<OPTION VALUE="Reverse">Reverse</OPTION>
<OPTION VALUE="Other">Other</OPTION>
</SELECT>
</tr>
<tr>
<td width="50%">Rarity:</td><td width="50%"><SELECT NAME="rarity">
<OPTION VALUE="" SELECTED>Select</OPTION>
<OPTION VALUE="Common">Common</OPTION>
<OPTION VALUE="Uncommon">Uncommon</OPTION>
</SELECT>
</tr>
<tr>
<td width="50%">Image:</td><td width="50%"><INPUT TYPE="file" NAME="bestand">
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="submit"</td>
</tr>
</table>
</form></p>
  
  </div>
</div>
<!-- ####################################################################################################### -->

<?php


    } else {
    
  // START
  
  ?>
  
  <div id="container">
  <div class="wrapper">
    <h1>Add a new card</h1>
  
  <?php
  
  if(isset($_FILES['bestand'])) { 
    //als het bestand groter is dan 1024000 bytes(1000kb) word hij niet toegelaten 
    if($_FILES['bestand']['size'] > 1024000) { 
        echo "Sorry, but the image you selected is to large"; 
    } else { 
        //kijken of het bestand wel een gif, png of jpg is 
        if($_FILES['bestand']['type'] == "image/jpeg") { 
            //kijken of er een nieuwe naam aan het bestand is gegeven 
            if(empty($_POST['naam'])) {
                $naam = rand(10000,99999);
            } else { 
                //strip de extensie om die achter de nieuwe bestandsnaam te plakken 
                $x = strrchr($_FILES['bestand']['name'], "."); 
                $naam = $_POST['naam'].jpg . $x; 
            } 
            //het bestand uploaden met de nieuwe of oude naam 
            move_uploaded_file($_FILES['bestand']['tmp_name'], "scans/" . $naam); 
            //voor linux of unix hosts chmodden we het bestand naar 777 zodat iedereen um kan zien 
            chmod("scans/" . $naam, 0777); 
        } else { 
            echo "The image you selected is no jpg file. Sorry, but at the moment we only support .jpg files."; 
        } 
    } 
} else { 
    echo "Selecteer een plaatje"; 
} 
  
  // STOP
    
        $language = $_POST['language'];
        $set = $_POST['set'];
        $name = $_POST['name'];
        $number = $_POST['number'];
        $kind = $_POST['kind'];
        $print = $_POST['print'];
        $rarity = $_POST['rarity'];
        
        $sql_insert_card = "INSERT INTO `chrishn5_main`.`uncontroled_cards` VALUES ('', '{$name}', '{$language}', '{$number}', '{$print}', '{$rarity}', '{$naam}', '{$set}', '{$kind}', '', '{$_SESSION['logginname']}')";
        $send_insert_card = mysql_query($sql_insert_card);
        
        ?>
        
        <p>Your card has been succesfully added. Your card will be visible for everybody when an admin has controlled it. </p>
        
        <?php
        }
        
        ?>
        
        </div>
       </div>
        
        <?php
include("foot.php"); // Contains header etc.


?>

Mvg.
 
Probeer eens regel 124 te veranderen

er staat
Code:
$naam = $_POST['naam'].jpg . $x;

dus de jpg staat gewoon ertussen zonder uberhaubt aanhalingstekens. En omdat je de extensie erboven
toch van het orginele bestand afpakt kun je net zo goed de jpg weg laten.

dat moet zijn
[/code]$naam = $_POST['naam']. $x; [/code]

Verder zou ik ook $_FILES['bestand']['mime'] controlleren want op deze manier is het wel heel
simpel om je website te hacken. Zoals de script is kun je vrij makkelijk een php bestand uploaden
naar je website doormiddel van Poison Nullbyte attack.

Verder controller je script alleen op headers en ook deze zijn vrij eenvoudig te mee te sturen. Reken
daarbij op dat je script automatisch de extensie overneemt en het is kinderspel je website te hacken.

Ik zou eens even een tutorial gaan lezen over de gevaren van php upload scripts ;) succes !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan