Ik wil een bestand door een gebruiker laten hernoemen. De aanroep wordt FileRename.php?id=text.txt
Er wordt dan een formulier getoond met de naam. Deze kan dan aangepast worden. Nu komt het. Dat gebeurt dus niet. Hier mijn code, zonder <! Doc...

<?php
$filenaam=($_GET["id"]);
If (isset($_POST['submit'])) {
	$nieuwenaam = $_POST['nieuwenaam'];
	if (!file_exists($nieuwenaam)) {
	     copy($filenaam, $nieuwenaam);
	     unlink($filenaam);
	     echo '<script type="text/javascript">alert("Gelukt\n\nHet bestand is hernoemd. U keert nu terug.");</script>' ;
 	     header('Location: EditDir.php');
 	 } else {
	    echo '<script type="text/javascript">alert("Helaas \n\nHet bestand bestaat al. U keert nu terug.");</script>' ;
  	    header('Location: EditDir.php');
 	}
}
?>	
<br>
<br>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="hernoemen" onkeypress="return event.keyCode != 13;">
<table width="50%" border="0" bgcolor="fefefe">
<tr>
<td><div align="center">Bestand hernoemen</div></td>
</tr>
<tr><td><div align="center">Huidige naam: <i>'<?php echo $filenaam; ?>'</i></div></td></tr>
<tr>
<td><div align="center">Hernoemen naar:<br>
<input type="text" name="nieuwenaam" size="90" minsize="5" maxsize="90" placeholder="<?php echo $filenaam; ?>"  value='<?php echo $filenaam; ?>' required />
</div></td></tr>
<tr><td><div align="center">
<input type="hidden" name="submit" value="true" />
<input type="submit" value="  Hernoem het bestand  " />
</div>
</td></tr>
</table>
</form>


Wat doe ik niet goed?
Waarom gebruik je enctype=multipart/form-data als je toch niets upload? :/

En tenzij alle bestanden in hetzelfde pad staan als dit script zul je gebruik moeten maken van het absolute interne pad om naar de bestanden te verwijzen (wat mij sowieso geen slecht idee lijkt).

Ook wil je de bestanden hoogstwaarschijnlijk in een geïsoleerde directory zetten. Vanuit veiligheidsoverwegingen, maar misschien ook zodat er geen bestaande scripts of andere bestanden overschreven kunnen worden.
Ik heb inmiddels een test gemaakt: https://depruus.000webhostapp.com/EditDir.php
Daar kun je verschillende dingen doen. De inlog is hier uit gelaten voor de test. De gebruiker kan alleen de bestanden zien die ik vrij zet. Bij de rest kan hij niet bijkomen. De header heb ik los gelaten. Ik krijg het niet werkend. Dus maar een andere route. Dank allen.
het bestand RenameFile.php heet vanaf nu RenameFile2.php


om even aan te tonen dat je iets aan beveiliging moet doen. (daarom krijg je nu een 404 bij het renamen)


--
dus niet alleen bij het ophalen van de lijst bekijken of dit bestand in aanmerking komt om te renamen, maar ook bij het daadwerkelijk tonen in het editscherm, en ook in het werkelijke rename-proces.

Dan nog zou ik ze ook nog eens in 1 directory plaatsen.
Daarnaast: zorg ook dat niemand een / in een bestandsnaam kan zetten, of zelfs ../../some/dir/

beetje jammer als geheimeconfig.php naar publiekeconfig.txt wordt hernoemd en je passwords op straat liggen

Reageren