claus ginsel: wiederholtes Absenden Formular

Beitrag lesen

Hallo

es geht um ein Formular, in dem ich einen Dateinamen eingebe und die Datei bei Vorliegen aller Voraussetzungen runter geladen wird. Nach dem Download ist das Textfeld mit dem Dateinamen weiterhin gefüllt. Das ist insoweit in Ordnung, ich kann den Download auch wiederholen.

Nun habe ich die Empfehlungen des BSI zur Websicherheit berücksichtigen wollen und auch einen CSRF-Schutz eingebaut. Nunmehr wird der 1. Download getätigt, aber weitere scheitern am CSRF-Schutz.

<?php
//...

session_start();
//...
if(isset($_POST['form_Download'])) 
{
	if (!isset($_SESSION['CSRF_DL'])) exit(...); 
	if(preg_match('/^[a-z0-9]{40}$/', $_SESSION['CSRF_DL'])==false) exit(...);
//diese Zeile ist das Problem bei wiederholten DL, redirect wird ausgeführt!
	if(!isset($_POST[$_SESSION['CSRF_DL']])) exit(...);
//...
?>
<HTML lang='de'>
...
<form action="index.php" method="POST">
	<input 
     type="hidden" 
     name="
       <?php 
         $_SESSION['CSRF_DL'] = sha1(uniqid('', true)); 
         echo $_SESSION['CSRF_DL'];  
       ?>" 
     value="1" 
  />
	<input type="text" name="input_datei" required>
	<input name="form_Download" type="submit" value="Bestätigen">
</form>
...
</HTML>

Könnt Ihr mir einen Tipp geben, wie ich mehrfaches Absenden und CSRF unter einen Hut kriege?

Bei der Gelegenheit, ich muss zugeben, ich habe den CSRF-Schutz mechanisch zugefügt. Die Beispiele für Gefährdungen sind ja soweit auch einleuchtend, aber ich kann jetzt nicht beurteilen, ob mein spezieller Anwendungsfall durch CSRF gefährdet ist. Was meint Ihr dazu?

Gruß Claus

akzeptierte Antworten