php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.02.2009, 18:09  
Erfahrener Benutzer
 
Registriert seit: 12.12.2007
Beiträge: 137
TeazY befindet sich auf einem aufstrebenden Ast
TeazY eine Nachricht über ICQ schicken TeazY eine Nachricht über MSN schicken
Standard funktion für html escape etc.

Servuz alle zusammen! Ich habe mal seit längerem wieder eine Frage an die jenigen unter euch die schon etwas erfahrener sind. Es geht um das Theme mysql injektion, bzw. html tags etc.

Zum einen übergebe ich die Formular eingaben and
mysql_real_escape_string()
und zum anderen nochmal an
htmlentities()

Damit ich das jetzt aber nicht jedes mal machen muss habe ich eine funktion geschrieben. Diese sieht wie folgt aus:

PHP-Code:
function escape($raw_data) {
$secure mysql_real_escape_stringhtmlentities($raw_data)), ENT_QUOTES;
return 
$secure;

jetzt zu meinen Fragen!

1. Ist die Funktion so richtig, bzw. wie prüfe cih am besten ob da auhc alles so funktioniert wie es soll, also mit dem escpaen und der mysql injection etc.

2. brauche ich überhaupt einen rückgabewert per return? Ich dachte den brauch tman nu zur ausgabe. Doch ich rufe die eingabe ja nicht über echo escape($_Post['eingabe']) auf, oder?

3. Mein Formular hat ja mehrere eingabefelde welche ich auf ihrer sicherheit hin überprüfen, bzw. escapen lassen muss.
Ist es jetzt notwendig für jedes eingabefeld die funktion aufzurufen, oder kann ich der funktion direkt alle eingabefelder übergeben und so nur einmal aufrufen?

4. wie arbeite ich dann mit den eingabefeldern weiter? Also wie komme ich für jedes eingabefeld an die eigenen daten um sie in eigenen variablen abzuspeichern und dementsprchend dann weiter zu verwenden?
Oder muss ich die funktion mit der speicherung in eine variable zusammenfügen?

z.B.:
PHP-Code:
$name escape($_POST['name']);
$email escape($_POST['email']);
//usw. 
Ich weiss, sind ne menge fragen, aber ich bin leider gerade etwas durcheinander. xD
__________________
Kommt Zeit, Kommt Rat!
.visit » TNK-Studios.de
.visit » TolgaFFM @ YouTube.de

Geändert von TeazY (09.02.2009 um 10:44 Uhr).
TeazY ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.02.2009, 18:23  
Erfahrener Benutzer
 
Registriert seit: 27.09.2008
Beiträge: 316
PHP-Kenntnisse:
Fortgeschritten
moveax1 befindet sich auf einem aufstrebenden Ast
Standard

so bekommst du auf jeden fall schon einmal datenbankmanipulierende Zeichen aus deinem Query heraus.

Vielleicht solltest du ganzzahlige Werte lieber per intval() entschärfen.

Was du damit machst ist dir überlassen. In eine Datenbank schreiben und dann wieder ausgeben. Oder was hast du vor?
__________________
twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

$live->free() OR die();
moveax1 ist offline  
Alt 08.02.2009, 18:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
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

Halte ich für total unsinnig. Weshalb sollte man HTML-maskierte Daten in die Datenbank schreiben? Das hat mit Datenbanksicherheit nichts zu tun, sondern nur mit browserseitige Sicherheitsaspekte wie XSS. Imho sollte man die Belange von Ausgabe und Speicherung auch hier trennen. Was, wenn Du bspw.mal eine Suchefunktion oder eine Verarbeitung jenseits von HTML implementieren willst? Dann mußt Du die Specialchars wieder mühevoll rausrechnen lassen. Außerdem ist htmlentities bei konsequenter Nutzung von UTF-8 nicht mehr notwendig (sondern htmlspecialchars).
__________________
--
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  
Alt 09.02.2009, 10:30  
Erfahrener Benutzer
 
Registriert seit: 12.12.2007
Beiträge: 137
TeazY befindet sich auf einem aufstrebenden Ast
TeazY eine Nachricht über ICQ schicken TeazY eine Nachricht über MSN schicken
Standard

also die daten kommen ja aus einem formular. im moment sitze ich an einem registrierungs formular. nachdem ich also die eingaben gecheckt, escaped und auf korekte eingabe hin überprüft habe sollen die daten logischer weise in die DB eingetragen werden und gleichzeitig auch per emial an den empfänger aus dem formular gesendet werden. Das Formular besteht eigentlich n aus 4 eingaben. (loginname, username, email, email wiederholen).

Ich möchte eigentlich nu die daten sichern falls jemand auf dumme gedanken kommt. Ich weiss ja ehrlich gesagt nciht was da so alle smöglich ist, doch
PHP-Code:
mysql_real_escape_stringhtmlentities($raw_data)); 
wurde mir hier im forum so empfohlen. Wollte mir nur die schreibarbeit sparen und habe es deshalb in eine funktion geschrieben, da ja noch einige weitere eingabemöglichkeiten für user auf meiner seite vorhanden sein werden.

@nikosch, soll ich jetzt einfach htmlentities durch htmlspecialchars ersetzten?

/Edit: Ich habe mal gerade bei php.net nachgeschaut und der unterschied zwischen htmlentities und htmlspecialchars ist der das htmlentities wirklich alle html elemente umwandelt, wogegen htmlspecialchars nur bestimmte html elemente umwandelt. In Formularen etc. wo ich aber 100% rein gar kein html haben möchte muss ich doch dann htmlentities benutzen, wie hier jetz in einem registrierungsformular, oder nicht?
__________________
Kommt Zeit, Kommt Rat!
.visit » TNK-Studios.de
.visit » TolgaFFM @ YouTube.de

Geändert von TeazY (09.02.2009 um 10:38 Uhr).
TeazY ist offline  
Alt 09.02.2009, 15:18  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
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

Lies meinen Beutrag. Da steht alles drin.
Datenbank: nur mysql_real_escape_string ().
Ausgabe: UTF-8 und htmlspecialchars
__________________
--
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  
Alt 09.02.2009, 21:02  
Erfahrener Benutzer
 
Registriert seit: 12.12.2007
Beiträge: 137
TeazY befindet sich auf einem aufstrebenden Ast
TeazY eine Nachricht über ICQ schicken TeazY eine Nachricht über MSN schicken
Standard

sorry das ich jetzt nochmal nachhaken muss, doch ich versteh das wohl noch nicht so ganz.

Ich habe jetzt mal zum test alle 3 funktionen einzeln angewendet und jeweils mit echo ausgegeben.

PHP-Code:
[left]$name "<a href=http://www.tnk-studios.de>TNK-Studios.de</a>";

$secure mysql_real_escape_string($name);
$secure2 htmlentities($name);
$secure3 htmlspecialchars($name);

echo 
$secure."<br/>\n";
echo 
$secure2."<br/>\n";[/left]
echo 
$secure3
als ausgabe bekomme ich beim ersten ganz normal den link und den beiden anderen jeweils den html code als normalen string ausgegeben. Das ist ja soweit auhc richtig, doch wieso soll ich den Link dann so in die DB eintragen und erst bei der ausgabe escapen wenn ich in dem formular welches ich zur zeit schreibe, soweiso keine html elemente benötige? wie oben gesagt brauche ich nur 2 namen (loginname und nickname) sowei die email adresse.

Also theoretisch gesehen könnte ich ja direkt die eingaben auf ihre korrekte schreibweise hin prüfen,w as ich auch mache mit preg_replace. Doch dennoch denke ich, ich muss das ganze zeug sicherheitshalbe escapen. nur verstehe ich jetzt nciht ganz was du mir sagen willst, sorry.
Das liegt aber nur daran das ich einfach anfänger bin.
__________________
Kommt Zeit, Kommt Rat!
.visit » TNK-Studios.de
.visit » TolgaFFM @ YouTube.de
TeazY ist offline  
Alt 09.02.2009, 21:10  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
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

Zitat:
doch wieso soll ich den Link dann so in die DB eintragen und erst bei der ausgabe escapen wenn ich in dem formular welches ich zur zeit schreibe, soweiso keine html elemente benötige?
Weil der "Link" erst in Html zum Link wird. Für die Datenbank ist das ein ganz normaler String. Und ein mit htmlentities/specialchars behandelter String ist für die DB eben kryptischer.
Der Schlüssel zum Problem liegt in der Wortgruppe "zur zeit"
__________________
--
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  
Alt 09.02.2009, 21:15  
Erfahrener Benutzer
 
Registriert seit: 12.12.2007
Beiträge: 137
TeazY befindet sich auf einem aufstrebenden Ast
TeazY eine Nachricht über ICQ schicken TeazY eine Nachricht über MSN schicken
Standard

das heisst bis auf mysql_real_escape_string() nutze ich alles andere erst bei der ausgabe?

Wenn ich das richtig versteh kann man also html elemente eingeben, doch durch mysql_real_escape_string() werden diese html elemente als strings in der datenbank behandelt. Bei der abfrage der DB und der ausgabe der werte werden die html elemente die als string in der DB standen durch den Browser wieder zu html elementen und dementsprechend auch behandelt und formatiert. Richtig?

Ok, und da wo das gewünscht ist kann ich die ausgabe unverändert lassen und da wo nicht, muss ich die ausgabe nochmal mit htmlentities, bzw. htmlspecialchars escapen. Ist das so richtig?
__________________
Kommt Zeit, Kommt Rat!
.visit » TNK-Studios.de
.visit » TolgaFFM @ YouTube.de
TeazY ist offline  
Alt 09.02.2009, 21:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
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

Am Anfang war das Wort.

Bzw. der Text Ob Script, Textdatei, Datenbankeintrag - erst bei der Ausgabe als HTML und damit Interpretation durch den Browser wird ein String zum Eingabefeld, zur Überschrift, zum Fließtext oder zum bösen Javascript. Für die Zeichen, für die das nicht gewünscht ist - normalerweise Nutzereingaben - muß also htmlspecialchars ran und alles schön harmlos in Spezialzeichen umsetzen.

Umgedreht wird der Eingabetext mit etwas Pech oder böser Absicht aus Versehen zum Teil der Datenbankabfrage. Dagegen hilft nur mysql_real_escape_string. Aber das ist eben nur für die DB wichtig.

Ergo: Es ist wichtig, Datenhaltung (DB) und Ausgabe getrennt zu behandeln, für beides gibt es Angriffsmöglichkeiten, die aber nichts miteinander zu tun haben und deshalb auch nicht mit viel hilft viel behandelt werden sollten.
__________________
--
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  
Alt 09.02.2009, 21:36  
Erfahrener Benutzer
 
Registriert seit: 12.12.2007
Beiträge: 137
TeazY befindet sich auf einem aufstrebenden Ast
TeazY eine Nachricht über ICQ schicken TeazY eine Nachricht über MSN schicken
Standard

Ich glaube ich habs gecheckt. ich müsste also theoretisch gesehen meine variable wie folgt behandel:

PHP-Code:
$_POST['name'] = "<a href='TNK-Studios.de'>TNK-Studios.de</a>";
$name htmlspecialchars($_POST['name']); 
Dadurch wird aus dem link dann folgender String:
&lt;a href='TNK-Studios.de'&gt;TNK-Studios.de&lt;/a&gt

Diesen kann ich dann bei meinem eintrag in die DB mit mysql_real_escape_string als solchen eintragen lassn.

Das würde dann wie folg aussehen:

PHP-Code:
$add "INSERT INTO users
(nick)
VALUES
(mysql_real_escape_string($name));"

soweit richtig? Wenn ja, stellt sihc mir eine neue frage. Wenn cih die usereingabe schon vor dem db eintrag mit htmlspecialchars in "nicht html" convertiert habe und es ohne mysql_real_escape_string in die datenbank eintrag, wäre dort dochd ann wiederum trotzdem nur ein string in der DB da ja keine wirklichen html elemente vorhanden sind, oder? Erst bei der abfrage würde dann der Browser aus den "&lt;" wieder ein "<" machen und dadurch den string wieder zu html und dementsprechend eine formatierte ausgabe.

Ich weiss nicht, aber im moment komm ich beitrag für beitrag mehr durcheinander. Irgendwie glaub cih grad ich check rein gar nichts mehr.
__________________
Kommt Zeit, Kommt Rat!
.visit » TNK-Studios.de
.visit » TolgaFFM @ YouTube.de
TeazY ist offline  
 


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
html formular mit einer php mail funktion basti-erfurt Scriptbörse 3 07.12.2008 15:21
[Erledigt] Array innerhalb einer Funktion Marko_Schulze PHP Tipps 2008 8 02.12.2008 18:58
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
Suchen und ersetzen außerhalb von HTML, dabei wird js escape NetLook PHP Tipps 2006 15 31.10.2006 11:57
&amp;amp;amp;lt;if&amp;amp;amp;gt; &amp;amp;amp;lt;/if&amp;amp;amp;gt; in einer HTML Datei fuer Templ PHP-Fortgeschrittene 6 03.11.2005 12:05
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
replace in Funktion PHP Tipps 2005-2 1 22.08.2005 22:01
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
IMAP: Bild(er) in HTML Part richtig darstellen PHP-Fortgeschrittene 1 07.10.2004 12:21
PHP funktion aus HTML aufrufen PHP Tipps 2004 14 22.09.2004 22:12
{$varname.optelement} mit preg_match aus HTML extrahieren PHP Tipps 2004 0 11.09.2004 04:13
Validitor (HTML 4.01) = Schwachsinn? Filewalker Off-Topic Diskussionen 19 03.08.2004 15:27
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php escape, html escape, php html escape, php escape html, htmlescape, escape php, php htmlescape, html escape php, php html escapen, php escapen, htmlescape php, html escapen, php mail escape, php escape function, php escape(), php html_escape, php escape \, escape html, php escape string, escape html php

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:14 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