zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Gästebuch Funktion soweit sicher?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 29.11.2007, 20:43
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 05.11.2007
Beiträge: 29
Mathao zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Gästebuch Funktion soweit sicher?

Hallo ich habe hier so ne kleine Gästebuch-entry-Funktion geschrieben und möchte fragen ob sie so weitesgehend "sicher" vor irgendwelchen Attacken ist. Sprich besonders wegen irgendwelchen SQL Befehlen oder unerlaubten Zeichen.
Darüber hinaus habe ich noch ein kleines Problem, der Gästebucheintrag ist in einem Kasten mit bestimmter Länge, schreibt man einen Text, der länger als die Breite des Kastens ist, wird einfach über den Kasten hinaus weiter geschrieben. Ich habe es mit worldwrap versucht, aber es passiert leider nichts. Hier ist die Funktion, ich würde mich über eure Hilfe sehr freuen und danke allen, die sich hier extra die Zeit nehmen, Leuten wie mir zu helfen.
PHP-Code:
function guestbook_entry() { # returned $content 1. errors 2. wenn gepostet wurde 3. formular und schreibt eintrag in datenbank
        
$dbh db_connect();

        if (@
$_POST['ok'] == 1) {
                if (
preg_match("/^[- A-Za-zÄÖÜßäöü]{2,25}$/i"$_POST['name'])){
                    if (
preg_match("/^[- A-Za-zÄÖÜßäöü]{2,25}$/i"$_POST['title'])){
  
            
$_POST['name']     = trim($_POST['name']);
      
$_POST['title']    = trim($_POST['title']);                
            
$_POST['name']     = htmlspecialchars($_POST['name']);
            
$_POST['title']    = htmlspecialchars($_POST['title']);
            
$_POST['text']     = htmlspecialchars($_POST['text']);
            
$_POST['text']     = wordwrap$_POST['text'], 70"<br />\n" ); /* Hier der Versuch automatische umbrüche zu machen*/
            
$_POST['text']     = nl2br($_POST['text']);
    

            
$select "SELECT * FROM `guestbook` WHERE `text` = '".$_POST['text']."';";
            
$selectResult mysql_query($select$dbh);
            
$selectRow mysql_fetch_array($selectResult);


            if (empty(
$_POST['text'])) {$content showtemp('guestbook_entry_textempty');}
            elseif (empty(
$_POST['name'])) {$content showtemp('guestbook_entry_nameempty');}
            elseif (empty(
$_POST['title'])) {$content showtemp('guestbook_entry_titleempty');}
            elseif (
$selectRow) {$content showtemp('guestbook_entry_exist');}

            else {
                
$select "INSERT INTO `guestbook` ( `name` , `text` , `date` , `title`) VALUES ('".$_POST['name']."' , '".$_POST['text']."' , '".date('U')."' , '".$_POST['title']."')";
                
$content showtemp('guestbook_entry_added');
                
$selectResult mysql_query($select$dbh);
            } 
                             
                    }else{return 
$content showtemp('guestbook_wrong_title');}
                }else{return 
$content showtemp('guestbook_wrong_name');}                            
      
        }
        else {
            
$content showtemp('guestbook_entry');
        }
        return 
$content;

Falls es zuwenig code ist liefere ich den Rest bei Anfrage gerne nach. Gegen spamschutz baue ich noch ein Captcha Script und vielleicht ne IP Sperre ein. Für so einen Anfänger wie mich sollte das erstmal ausreichen. Manchen wird auffallen, dass beim Textfeld alles eingetragen werden kann, ich wollte da keine Beschränkungen machen, vielleicht hat da jemand nen Tipp für mich, was man an dieser Stelle so macht.
Danke nochmal an alle
MfG Mathao

Geändert von Mathao (29.11.2007 um 20:50 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 29.11.2007, 22:24
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Es ist nicht sicher vor SQL-Injektionen.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 29.11.2007, 22:35
Benutzerbild von Timo
table-layout: none;
XHTMLforum-Kenner
 
Registriert seit: 11.11.2006
Beiträge: 5.345
Timo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein Lichtblick
Standard

klartext: htmlspecialchars() nützen nichts wenn du die Daten in eine DB schreiben willst, da musst du mysql_real_escape_string() nehmen

Gruß
Timo
__________________
Um weitere Erklärungen eingeblendet zu bekommen, drücken Sie bitte die Tastenkombination Alt + F4
Mit Zitat antworten
  #4 (permalink)  
Alt 30.11.2007, 01:21
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 05.11.2007
Beiträge: 29
Mathao zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von T1mo Beitrag anzeigen
klartext: htmlspecialchars() nützen nichts wenn du die Daten in eine DB schreiben willst, da musst du mysql_real_escape_string() nehmen

Gruß
Timo
Ok, ich nehme an dies ist die Antwort auf Gumbos Post. Danke dir vielmals ^^, ändere ich um. Was ist mit dem Textfeld und dem worldwrap_Problem. Jemand da ne Ahnung?
Mit Zitat antworten
  #5 (permalink)  
Alt 30.11.2007, 04:08
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Gewöhn es dir gleich "sauber" an - nicht so:

if (@$_POST['ok'] == 1)

Sondern so:

if(isset($_POST['ok'])) ...

Was bezweckst du damit mit dem preg_match? Willst du alle Zeichen außer die erlaubten verbieten? Wozu das ganze?

Du kannst auch alle übertragenen Dateien "in einem Schwung" aufräumen, z.B. so:

foreach($_POST as $key=>$value) $_POST[$key] = trim(strip_tags($value));

Das löscht HTML und Leerzeichen raus.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
  #6 (permalink)  
Alt 30.11.2007, 12:45
Benutzerbild von Timo
table-layout: none;
XHTMLforum-Kenner
 
Registriert seit: 11.11.2006
Beiträge: 5.345
Timo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein Lichtblick
Standard

Also wenn ich so ein Formular hab, prüfe ich immer so ob es abgeschickt wurde:

PHP-Code:
if($_SERVER['REQUEST_METHOD'] = 'POST') {
// ...

Gruß
Timo
__________________
Um weitere Erklärungen eingeblendet zu bekommen, drücken Sie bitte die Tastenkombination Alt + F4
Mit Zitat antworten
  #7 (permalink)  
Alt 30.11.2007, 13:44
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Geht auch, aber nicht bei zwei verschiedenen Formularen. Daher würde ich immer die Existenz des Submittbuttons überprüfen
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
  #8 (permalink)  
Alt 30.11.2007, 14:33
Benutzerbild von Timo
table-layout: none;
XHTMLforum-Kenner
 
Registriert seit: 11.11.2006
Beiträge: 5.345
Timo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein Lichtblick
Standard

Zitat:
Zitat von Boris Beitrag anzeigen
Geht auch, aber nicht bei zwei verschiedenen Formularen. Daher würde ich immer die Existenz des Submittbuttons überprüfen
bei 2 formularen nicht, aber ich hab ja gesagt bei so einem forumal
__________________
Um weitere Erklärungen eingeblendet zu bekommen, drücken Sie bitte die Tastenkombination Alt + F4
Mit Zitat antworten
  #9 (permalink)  
Alt 30.11.2007, 15:37
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 05.11.2007
Beiträge: 29
Mathao zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Wie ist das nun in dem Textfeld genau? Was sollte ich da erlauben und was nicht? Wenn ich beispielsweise html code nicht erlaube, funktioniert

PHP-Code:
$_POST['text']     = nl2br($_POST['text']); 
nicht mehr. Könnt ihr mir bitte ein paar Tipps geben, was man da nun machen kann? Sprich was erlauben und was nicht.
Darüber hinaus hab ich noch das Problem, dass wenn eine ganze Zeichenkette alleine in einer Zeile steht diese nicht umgebrochen wird, wenn sie zu lange ist. Hier wird dann über den Gästebucheintragskasten hinaus geschrieben.
Befinden sich zwei Zeichenketten in einer Zeile und ist die eine länger als der Gästebucheintragskasten, so wird die längere Zeichenkette umgebrochen, sodass sie in der nächsten Zeile wieder alleine steht.
Was nun wieder zur Folge hätte, dass wenn sie zuuuu lang ist auch über den Kasten hinaus geschrieben wird.
Danke schon mal im Voraus.
Mfg Mathao
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 30.11.2007, 18:08
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Beim sichern in die Datenbank lässt man Textfelder unangerührt (mal von der Müllentfernung abgesehen). Erst bei der Ausgabe auf eine Website sollte man diesen "behandeln" - mit z.B. einem nl2br, htmlspecialchars oder was auch immer man braucht.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
Sponsored Links
Antwort

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 are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JQuery Funktion aufrufen wenn Bedingung erfüllt muella Javascript & Ajax 5 10.07.2009 17:55
[PROTOTYPE] Funktion erst beenden, wenn Ajax Aufruf abgeschlossen ist naitsab Javascript & Ajax 3 09.04.2009 16:41
Code einer bestehenden Funktion hinzufügen cybertron Javascript & Ajax 13 01.01.2009 16:53
Funktion gibt Array nicht zurück Schneemann Serveradministration und serverseitige Scripte 8 05.05.2008 02:14
[PHP] Funktion zum Optimieren von CSS Floele Serveradministration und serverseitige Scripte 2 13.08.2005 11:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:48 Uhr.