php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.01.2012, 13:44  
Ahrta5
Gast
 
Beiträge: n/a
Standard Schadcode aus Eingabe filtern bzw. entfernen

Also ich bin Anfänger in Sachen PHP, ich kann zwar ohne Probleme verschiedene Funktionen programmieren aber z.B. in Sachen Sicherheit oder "sauberes" programmieren fehlt mir noch die Erfahrung.

Jetzt möchte ich verschiedene Funktionen programmieren wo der Besucher einen Text eingeben kann sei es z.B. eine Anfrage zu einem kostenlosen Template oder ähnliches.

Nun weis ich aber nicht wie ich den Text filtern soll auf schädlichen Code was der Besucher mir da eingeben kann also z.B. php oder javascript.
Ich habe schon recherchiert und habe folgende Funktionen gefunden:
- htmlentities()
- htmlspecialchars()
- strip_tags()

So würde ich jetzt die Funktion strip_tags verwenden bin mir aber nicht sicher ob es jetzt die richtige Lösung ist, denn auf php.net steht das diese Funktion auch Teile entfernen kann die garnicht von böser Natur sind.

Wenn ich dann z.B. vorher htmlentities oder htmlspecialchars verwende werden mir auch Umlaute und Sonderzeichen umgewandelt und durch strip_tags dann aus der Eingabe entfernt, was ich vermeiden möchte.

Könnt ihr mir da einen Rat geben mit welcher Funktion ich die Eingabe am besten filtern soll oder z.B. mit welcher Reihenfolge von Funktionen oder eine andere Filter-Funktion vorschlagen?

Ich wäre euch sehr dankbar dafür.


Gruß Cris
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.01.2012, 13:55  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Es geht darum in welchem Kontext du die Benutzereingaben verwendest (HTML im Browser, Absender einer eMail, speichern in einer Datenbank...). Dazu gibt es auch viele hilfreiche Erklärungen, hier z.B.

http://wiki.selfhtml.org/wiki/Artike..._und_behandeln

Du musst erstmal definieren wo das hin soll und dann welche Werte es annehmen darf, dabei ruhig eher agressiv vorgehen.
chorn ist offline   Mit Zitat antworten
Alt 16.01.2012, 14:08  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

generell auch dort mal durchklicken: https://www.owasp.org/index.php/XSS_...on_Cheat_Sheet
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 16.01.2012, 19:12  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Wenn du z.B. einen Nachnamen in eine Tabelle einfügen willst, dann machst du das ja so:

PHP-Code:
$name "Meier";
$sql "INSERT INTO user (name) VALUES ('$name')";
// usw. 
was zu VALUES ('Meier') wird.

Wenn nun der Mensch nicht Meier heißt, sondern O'Neill, dann bekommst du:
... VALUES ('O'Neill')
was offensichtlich zu einem Fehler führt, weil der Stringbegrenzer selbst im String enthalten ist.

Auch beim Auslesen von Daten kann es gefährlich werden. Beispiel: Jemand muss Usernamen und Passwort eingeben, was dann führt zu:
PHP-Code:
$sql "SELECT id FROM user WHERE name = '$name' and pass='$pass'"
Bei den Eingaben Hans und Geheim wird das zu:
PHP-Code:
$sql "SELECT id FROM user WHERE name = 'Hans' and pass='Geheim'"
Falls nun aber ein Bösewicht als Passwort das hier eingibt: Hans or ' OR '1' = '1
dann baut deine Query zusammen:
PHP-Code:
$sql "SELECT id FROM user WHERE name = 'Hans' and pass='' or '1'='1'"
Du musst also alle Eingaben so entschärfen, dass einfache und doppelte Hochkommas nicht mehr mitspielen:
PHP-Code:
$sql "SELECT 
            id 
        FROM 
            user 
        WHERE 
            name='" 
mysql_real_escape_string($name) . "'
        AND 
            pass='" 
mysql_real_escape_string($pass) . "'"
Sodele, und jetzt das traurige. das alles kannst du gleich wieder vergessen, weil du dir gleich angewöhnst, die veralteten mysql-ANweisungen nicht mehr zu benutzen, sondern entweder mysqli, oder gleich PDO zu benutzen und dort die "Prepared Statements". Dann übernimmt der Treiber selbst das Escapen und du kannst dich um interessanteres kümmern.

PDO:
PHP-Code:
$db = new PDO(...);

$sql "SELECT 
            id 
        FROM 
            user 
        WHERE 
            name = :name 
        AND 
            pass= :pass"
;
$stmt $db->prepare($sql);
$stmt->bindValue(':name',$name,PDO::PARAM_STR);
$stmt->bindValue(':pass',$pass,PDO::PARAM_STR);
$stmt->execute(); 
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   Mit Zitat antworten
Alt 16.01.2012, 20:37  
Ahrta5
Gast
 
Beiträge: n/a
Standard

Vielen Dank für die Hinweise - werde ich erst mal durchlesen

Zitat:
Zitat von chorn Beitrag anzeigen
Es geht darum in welchem Kontext du die Benutzereingaben verwendest (HTML im Browser, Absender einer eMail, speichern in einer Datenbank...). Dazu gibt es auch viele hilfreiche Erklärungen, hier z.B.

http://wiki.selfhtml.org/wiki/Artike..._und_behandeln

Du musst erstmal definieren wo das hin soll und dann welche Werte es annehmen darf, dabei ruhig eher agressiv vorgehen.
Also ich möchte mir ein einfaches und klein gehaltenes Shop-Modul programmieren.

Deshalb kann es ein Preisvorschlag (Zahlen + Text) bishin zu einer Kundenanfrage sein, je nach Zweck wird es in die Datenbank geschrieben, per E-Mail versendet, als HTML wieder ausgegeben oder alles zusammen.

Das Shop-Modul liegt jetzt gerade an, aber ich möchte es eben auch für spätere Projekte wissen wie man die Eingabe sicherer macht.
  Mit Zitat antworten
Alt 16.01.2012, 20:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Für die Sicherheit zur Eingabe in eine Datenbank sind erstmal real_escape oder preparend statements maßgeblich (siehe Link: Kontextwechsel). Damit hast Du aber erstmal nur die Originaleingaben in ein anderes Medium überführt. Wo immer Du damit arbeitest, musst Du weiter absichern.
Ganz grobe Sicherheitsverstöße (offensichtliche Angriffe) kannst Du auch bei der Eingabe gleich rausfiltern. Die zu benennen ist aber schwer, weil einzelfallabhängig. Wenn Deine gesamte APP bspw. kein HTML erlaubt, könntest Du eine solche Eingabe als Angriff, Fehler oder gar nicht bewerten und das HTML dann im Klartext (die Tags) darstellen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 17.01.2012, 09:35  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
je nach Zweck wird es in die Datenbank geschrieben
Und je nach Zweck (Kontext) musst du das filtern. Mach dir klar, welche abstrakten Datentypen du brauchst (Name, Beschreibung, Preis), wie die aussehen (Plaintext, HTML, Decimal mit Trennzeichen und ggf. Währungszeichen) und bau dir entsprechende Funktionen die das abbilden und auswerten können. Regexp können dir dabei helfen.
chorn ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Eingabe teilen und in Datenbank schreiben Exedo PHP Einsteiger 7 19.12.2011 11:06
Subdomain aus String entfernen kl_welf PHP Einsteiger 4 24.10.2011 19:01
Den \ aus einen namen filtern Filtik PHP Einsteiger 3 18.09.2011 19:20
Get Parameter nach Eingabe und Submit verloren hjw-kunstwerk PHP Einsteiger 12 07.08.2011 18:15
[Erledigt] Formular - Sicherheit mit Filtern kurtmos PHP Tipps 2009 19 15.12.2009 21:21
[Erledigt] Datensatz mit Eingabe vergleichen Chili-Schaf PHP Tipps 2009 4 21.07.2009 18:16
Sicherheitstechnisch verschiedene Eingaben filtern BartTheDevil89 PHP Tipps 2009 11 19.04.2009 22:36
[Erledigt] For-Schleife (mehrfach?) 22hase PHP Tipps 2009 26 12.01.2009 15:17
Bei richtiger Eingabe Daten an nächste Seite versenden xx_heidi_xx PHP Tipps 2008 49 27.05.2008 14:56
Gefährlichen Code entfernen Davido PHP Tipps 2006 3 28.08.2006 13:05
URL Eingabe in Formular-Eingabefeld PHP Tipps 2005-2 3 22.09.2005 11:02
\ entfernen Stinger PHP Tipps 2005-2 3 10.07.2005 19:35
[Erledigt] Eingabe in Textfeld A, Ausgabe Textfeld B wie? HTML, Usability und Barrierefreiheit 2 01.06.2005 18:09
Variable entfernen Adrenochrom PHP Tipps 2005 2 02.01.2005 01:23
[Erledigt] Select Feld - Eingabe merken ?!? PHP-Fortgeschrittene 4 18.11.2004 12:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php benutzereingaben filtern, php schadcode ausfiltern, php schadcode filtern, php schadcode, schadcodes entfernen, php, textbox schadcode verhindern, javascript schadcode aus texteingabe filtern, eingaben nach schädlichem code filtern, filter php entfernen, schaedlichen code ausfiltern, php schadcode entfernen, schadcode herausfilter php, eingabe filtern code php, php benutzereingabe auf schadcode

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum