2016-05-20 8 views
1

Ich habe eine einfache Webseite mit einem Textfeld, dass, wenn mehrere Zeilen von Tab-Text eingegeben wird, ein PHP-Skript den Text verarbeitet und die resultierende Zeichenfolge als eine Textdatei für den Benutzer zum Download ausgibt.Wie soll ich Benutzereingaben bereinigen, wenn ich nicht in eine Datenbank schreibe?

Die Seite selbst ist nichts weiter als eine Textarea und eine Submit-Schaltfläche, die sich selbst veröffentlicht. Wenn Post-Daten empfangen werden, erstellt es grundsätzlich ein Array der Textzeilen in der Textbox (unter Verwendung explode("\n",$text), dann Schleifen durch jede Zeile und erstellt ein Array von jedem Abschnitt des Textes in der Zeile (mit explode("\t",$text). Schließlich dauert es jedes Element in dem Array und erstellt einen String mit ihm. die einzige andere pHP-Funktion im Skript verwendet wird, ist die date Funktion und die strtotime Funktion zusammen mit ein paar foreach Aussagen.

Wenn der String abgeschlossen ist, wird die Zeichenfolge gesendet der Browser als eine Textdatei mit ein paar header() Funktionen (Content-Disposition: attachment;, Content-Type:, etc.). So angenommen, $str ist die Zeichenfolge, so wird es an den Browser gesendet:

header('Content-Disposition: attachment; filename="file.txt"') 
header('Content-Type: text/plain'); 
header('Content-Length: ' . strlen($str)); 
echo $str; 
exit(); 

Beispiel: Angenommen, der Text dieses (so tun, als die Räume zwischen Text sind Tabs)

John Smith Freshman 
Jane Doe  Sophomore 

das Skript eine Zeichenfolge erstellt wie folgt dann geliefert wird:

Student:\nfirstname:John\nlastname:Smith\nYear:Freshman\nEndStudent\nStudent:\nfirstname:Jane\nlastname:Doe\nYear:Sophomore\nEndStudent\n 

Und das Skript wird als text/plain Datei an den Browser gesendet.

Das Skript funktioniert einwandfrei, die Ausgabedatei ist korrekt. Meine Frage ist, welche Art von Sicherheitslücken ich offenlasse und es ist möglich, sie zu schließen (und wie man sie schließt). Ich möchte, dass die Seite öffentlich ist.

+0

Sie hängen davon ab, wie Sie die Datei über PHP schreiben/erstellen - Sie möchten diesen Code teilen? – Darren

+0

@Darren Tatsächlich ist keine Datei auf dem Server erstellt. Die Zeichenfolge, die verarbeitet wird, wird einfach wiedergegeben, nachdem die Header erstellt wurden. Ich habe meinen Beitrag oben bearbeitet, um den Code anzuzeigen, der dies tut. – Paul

+1

'header ('Verbindung: schließen')' * nach * die Body-Ausgabe ist Unsinn/hat keinen Effekt/wird trotzdem nicht gesendet. Geh weg. Sie können auch 'exit' weglassen; Ich würde annehmen, dass Ihr Skript nach der letzten Zeile sowieso von selbst beendet würde ... – deceze

Antwort

4

Da Sie nie Interpretation des Text und ausführen jeden Code in Reaktion auf Anweisungen im Text gefunden, gibt es absolut kein Sicherheitsproblem hier.

Das einzige, was Sie vorsichtig sein sollten, ist die Verwendung von Sonderzeichen: Ihre Ausgabe verwendet bestimmte Zeichen mit einer bestimmten Bedeutung, nämlich \n. Wenn Ihre Eingabe eine \n enthält und Sie diese Tube an die Ausgabe übergeben, ändert sich die Bedeutung Ihrer Ausgabe. Vielleicht müssen Sie escape oder entfernen alle \n gefunden in der Eingabe.

Verwandte Themen