Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Benutzereingaben richtig überprüft?

Diskussion: Benutzereingaben richtig überprüft? im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi, Ich habe mir zu Lernzwecken ein kleines Gästebuch gemacht und wollte mal von euch wissen, ob die Validierung ...

Antwort
Alt 13.01.07, 22:48   #1 (permalink)
 
Registriert seit: 25.07.06
valenterry Leistung: Facit NTK
Likes: 0
Standard Benutzereingaben richtig überprüft?

Anzeige

Hi,
Ich habe mir zu Lernzwecken ein kleines Gästebuch gemacht und wollte mal von euch wissen, ob die Validierung der Benutzereingaben richtig/vollständig ist.
Hier der Code:

PHP-Code:
if(!isset($name) || !isset($titel) || !isset($eintrag))
{
    die(
"Deine Eingaben sind unvollständig.");
}

if(!
is_string($name) || !is_string($titel) || !is_string($eintrag))
{
    die(
"Deine Eingaben sind unvollständig.");
}

if(
trim($name)=="" || trim($titel)=="" || trim($eintrag)=="")
{
    die(
"Es müssen alle Felder ausgefüllt werden.");
}


//Besondere HTML-Zeichen ersetzen.
$titel htmlentities($titel);
$name htmlentities($name);
$eintrag htmlentities($eintrag);


//Zeilenumbrüche richtig darstellen.
$titel nl2br($titel);
$name nl2br($name);
$eintrag nl2br($eintrag);


//Leerzeichen richtig darstellen.
$titel str_replace(' ''   '$titel);
$name str_replace(' ''   '$name);
$eintrag str_replace(' ''   '$eintrag);


//Bei zu langen Wörtern einen Zeilenumbruch erzwingen, um das Layout zu bewahren.
$titel wordwrap$titel80"\n");
$name wordwrap$name80"\n");
$eintrag wordwrap$eintrag80"\n");


//Vor SQL-injektion schützen.
$titel mysql_escape_string($titel);
$name mysql_escape_string($name);
$eintrag mysql_escape_string($eintrag); 
valenterry ist offline   Mit Zitat antworten
Alt 13.01.07, 23:18   #2 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb

Erstmal als allgemeiner Hinweis: Da du mit allen 3 Eingaben dasselbe machst, kannst du das auch in eine Funktion packen, der du dann eine der 3 Felder jeweils als Parameter übergibst. Fehlerausgaben solltest du nach Möglichkeit nu auch net mit die() machen, sondern einen Fehlerstring ausgeben an entsprechender Stelle. Ob is_string() nun nötig ist, darüber kann man auch streiten. Achja, und deine Auswertung sieht ein bisschen aus, als ob register_globals aktiviert sein muss, das würde ich auch ausbessern.

Etwas aufbereitet mit meinen Vorschlägen sähe das dann etwa so aus (ungetestet):

PHP-Code:
<?php

function prepare_input $string )
{
    if ( empty ( 
trim $string ) ) )
        return 
false;

    
$string htmlentities $string );
    
$string nl2br $string );
    
$string wordwrap $string80' ');
    
$string mysql_escape_string $string );

    return 
$string;
}

$name    prepare_input $_POST 'name'    ] );
$titel   prepare_input $_POST 'titel'   ] );
$eintrag prepare_input $_POST 'eintrag' ] );

if ( 
$name === false || $titel === false || $eintrag === false )
{
    
// Fehlerausgabe, aber bitte net mit die() ;)
}
else
{
    
// in die Datenbank damit
}

?>
Vorteil dabei: die Funktion kannst du auslagern und von beliebiger Stelle aus aufrufen, um alle möglichen Benutzereingaben aufzubereiten... vielleicht willst du ja noch andere Formulare auf deiner Website auswerten. In puncto Sicherheit ist dabei aber an alles gedacht.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 13.01.07, 23:37   #3 (permalink)
Themenstarter
 
Registriert seit: 25.07.06
valenterry Leistung: Facit NTK
Likes: 0
Standard

Danke, das ist ne gute Idee.
Kann ich eigentlich die Funktion auch in eine Datei schreiben und diese dann mit include einbinden? Gibt es da etwas zu beachten?
Du meintest ja, ich soll kein die() benutzen, aber wieso nicht?
Wie soll ich denn stattdessen das Script abbrechen?
Und noch zu dem register_globals. Das ist bei mir (natürlich) nicht aktiviert. Verlangt das etwa eine von den verwendeten Funktionen?
valenterry ist offline   Mit Zitat antworten
Alt 13.01.07, 23:51   #4 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb

Zitat:
Original von valenterry
Kann ich eigentlich die Funktion auch in eine Datei schreiben und diese dann mit include einbinden?
Das meinte ich mit "auslagern".

Zitat:
Du meintest ja, ich soll kein die() benutzen, aber wieso nicht?
Wie soll ich denn stattdessen das Script abbrechen?
Abbrechen gar nicht. Gute Software bricht nicht einfach ab, wenn irgendwas passiert, womit sie nicht klarkommt, sondern arbeitet weiter und gibt an passender Stelle eine schön formatierte Fehlermeldung aus. die() beendet rabiat jegliche Ausgaben, allerdings wäre es natürlich praktischer, du würdest deine Seite ausgeben wie immer, eventuell sogar nochmal das Formular anzeigen und einfach nur eine Fehlermeldung dabei stehen haben, in der dem Nutzer dann erklärt wird, was er falsch gemacht hat.

Zitat:
Und noch zu dem register_globals. Das ist bei mir (natürlich) nicht aktiviert. Verlangt das etwa eine von den verwendeten Funktionen?
Nein, aber deine unmittelbare Abfrage auf isset($name) statt z.B. isset($_POST['name']) suggeriert, dass du mit register_globals=on rechnest.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Benutzereingaben richtig überprüft?
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Online Aktivität wird überprüft Olympus79 (In)security allgemein 20 31.10.07 13:36
wie überprüft eine Trial ob man sie noch nutzen kann vortex Applikationen 5 27.10.06 20:40
Netzwerkverknüpfungen werden nicht überprüft Guyfawkes Windows 3 27.11.04 12:23
richtig lernen TheVoid (In)security allgemein 16 23.10.04 00:28


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61