Forum Doku Wiki Blog

Forumsarchiv 2011, Mai
variablenübergabe mit $_Get[]

archivierte Beiträge lesen

  1. (PHP) variablenübergabe mit $_Get[] von peschels, 31. 05. 2011, 17:33

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 31. 05. 2011, 17:33 Uhr von peschels veröffentlicht.

Hallo zusammen!
Ich habe folgendes Problem:
Ich lese aus einer Datenbank Personendaten aus und möchte dann den Namen über einen Link übergeben

echo"<a href='test.php?name=zeile['name']'>";

Diesen übernehme ich dann und will damit eine neue Datenbankabfrage machen

$name = $_GET['name'];
"SELECT * from test WHERE name=$name"

Dies funktioniert auch soweit ganz gut, solange der Name keine Sonderzeichen enthält.Sobald dies der Fall ist, wird zwar der korrekte Name übergeben, jedoch funktioniert das SELECT - Statement nicht mehr.
Die Abfrage

echo $name; // Ausgabe : Müller
if ( $name != 'Müller') echo " ungleich";

liefert die Ausgabe "ungleich" und verwirrt mich daher immer mehr. Woran kann das liegen?

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 31. 05. 2011, 17:48 Uhr von bleicher veröffentlicht.

Grüße,
> $name = $_GET['name'];
> "SELECT * from test WHERE name=$name"

dafür gehörst du gestraft! bist du dir bewusst, dass an dieser stelle beliebiges code reingeshcleust werden kann? das nciht nru fehler sondern auch schaden produizert?
escape das ganze und konvertiere vltl noch die htmlentities
MFG
bleicher
--
__________________________-


FirefoxMyth

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 01. 06. 2011, 03:50 Uhr von MudGuard veröffentlicht.

Hi,

> > $name = $_GET['name'];
> > "SELECT * from test WHERE name=$name"
>
> dafür gehörst du gestraft! bist du dir bewusst, dass an dieser stelle beliebiges code reingeshcleust werden kann? das nciht nru fehler sondern auch schaden produizert?
> escape das ganze und konvertiere vltl noch die htmlentities

NEIN! Keinesfalls HTML-Entities in die Datenbank schreiben. Wenn überhaupt, werden HTML-Entities für die HTML-Ausgabe erzeugt, aber nicht für die Datenbank.

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...

Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 02. 06. 2011, 17:25 Uhr von peschels veröffentlicht.

> Grüße,
> > $name = $_GET['name'];
> > "SELECT * from test WHERE name=$name"
>
> dafür gehörst du gestraft!
Danke für die ehrliche Antwort
> bist du dir bewusst, dass an dieser stelle beliebiges code reingeshcleust werden kann? das nciht nru fehler sondern auch schaden produizert?
Dessen bin ich mir nicht bewusst ! Wie fange ich dies dann ab?

Danke und Gruß peschels

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 02. 06. 2011, 17:57 Uhr von Auge veröffentlicht.

Hallo

> > Grüße,
> > > $name = $_GET['name'];
> > > "SELECT * from test WHERE name=$name"
> >
> > dafür gehörst du gestraft!
> Danke für die ehrliche Antwort
> > bist du dir bewusst, dass an dieser stelle beliebiges code reingeshcleust werden kann? das nciht nru fehler sondern auch schaden produizert?
> Dessen bin ich mir nicht bewusst ! Wie fange ich dies dann ab?

1. Du prüfst den übergebenen Wert auf Plausibilität.
Das ist aber bei Freitext nicht so einfach. Das ginge aber mit einem regulären Ausdruck.

2. Der Wert muss kontextgerecht behandelt werden.
Es kann Schadcode übergeben werden, hier ein Stück Name mit folgendem Code, der als SQL-Query durchgeht und in deinem Fall ausgeführt wird. Siehe dazu auch Cheatahs Verlinkung. Hier ist der Kontext MySQL, die für Strings zu benutzende Funktion heißt mysql_real_escape_string, Ganzzahlen sind mit intval zu behandeln.

3. Das Umkopieren in eine Variable macht, exzessiv angewandt, den Code unübersichtlich.
Irgendwann fügst du irgendwo zusätzlichen Code ein und weißt dann evtl. nicht mehr um die Herkunft von $name.

$Query = "SELECT * from test WHERE name = '". mysql_real_escape_string($_GET['name']) ."'";

Tschö, Auge

--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"

ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}

Veranstaltungsdatenbank Vdb 0.3

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 31. 05. 2011, 18:10 Uhr von Tom veröffentlicht.

Hello,

> Ich habe folgendes Problem:
> Ich lese aus einer Datenbank Personendaten aus und möchte dann den Namen über einen Link übergeben
>
> echo"<a href='test.php?name=zeile['name']'>";
>

> Diesen übernehme ich dann und will damit eine neue Datenbankabfrage machen
>
> $name = $_GET['name'];
> "SELECT * from test WHERE name=$name"
>

> Dies funktioniert auch soweit ganz gut, solange der Name keine Sonderzeichen enthält.Sobald dies der Fall ist, wird zwar der korrekte Name übergeben, jedoch funktioniert das SELECT - Statement nicht mehr.

Wie sind die Daten denn in die Datenbank gekommen?
Welche Codierung wurde dafür verwendet?

In welcher Codierung arbeitet Dein Webserver?
In welcher Codierung speicherst Du das PHP-File ab?

   Müller in ISO8859-1 ist eben nicht gleich Müller in utf-8



Liebe Grüße aus dem schönen Oberharz


Tom vom Berg



--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 03. 06. 2011, 15:59 Uhr von peschels veröffentlicht.

> Wie sind die Daten denn in die Datenbank gekommen?
Ich habe die Daten in die Datenbank importiert(mit einer .csv)
> Welche Codierung wurde dafür verwendet?
wurde als UTF-8 eingelesen
> In welcher Codierung arbeitet Dein Webserver?
läuft grad "nur" unter xampp standard einstellung
> In welcher Codierung speicherst Du das PHP-File ab?
auch als UTF-8

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 31. 05. 2011, 18:13 Uhr von dedlfix veröffentlicht.

Hi!

> "SELECT * from test WHERE name=$name"
> Dies funktioniert auch soweit ganz gut, solange der Name keine Sonderzeichen enthält.

Kontextwechsel beachten, und das nicht nur aus syntaktischen sondern auch sicherheitstechnischen Gründen.


Lo!

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 31. 05. 2011, 23:58 Uhr von YoCOSi veröffentlicht.

Hi, dann setz doch in dein Formular einfach ein, dass dieses die Daten bevor sie in die Datenbank gespeichert werden die Werte mit html entities utf-8 um...so ist ä = &auml; etc...

bischen googlen dann findeste du einen guten code...aber so ist die Lösung ;-)

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 01. 06. 2011, 03:49 Uhr von MudGuard veröffentlicht.

Hi,

> Hi, dann setz doch in dein Formular einfach ein, dass dieses die Daten bevor sie in die Datenbank gespeichert werden die Werte mit html entities utf-8 um...so ist ä = &auml; etc...

Und warum sollte man so einen Unsinn machen?

HTML-Entities gehören allerhöchstens (wenn die Codierung der Seite die Zeichen nicht direkt erlaubt) bei der HTML-Ausgabe eingesetzt, aber keinesfalls für die Datenbank.
Für die Datenbank müssen die Daten datenbank-gemäß escaped werden. Nicht HTML-gemäß.

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...

Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 01. 06. 2011, 03:52 Uhr von MudGuard veröffentlicht.

Hi,

>
> echo"<a href='test.php?name=zeile['name']'>";
>

> Diesen übernehme ich dann und will damit eine neue Datenbankabfrage machen
>
> $name = $_GET['name'];
> "SELECT * from test WHERE name=$name"
>

> Dies funktioniert auch soweit ganz gut, solange der Name keine Sonderzeichen enthält.

Das bezweifle ich.
Oder steht in $name wirklich ein Spaltenname?

Wenn es ein Feldinhalt wäre, bräuchte es (abgesehen vom DB-Escaping) Anführungszeichen außenrum.

cu,
Andreas
--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...

Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 01. 06. 2011, 08:43 Uhr von dedlfix veröffentlicht.

Hi!

> > "SELECT * from test WHERE name=$name"
> Oder steht in $name wirklich ein Spaltenname?
> Wenn es ein Feldinhalt wäre, bräuchte es (abgesehen vom DB-Escaping) Anführungszeichen außenrum.

Jein, MySQL kennt auch eine Hex-Notation für Strings. Dafür hatte ich aber bisher noch keinen sinnvollen Anwendungsfall. Man könnte es vielleicht für Angriffszwecke nutzen, wenn mit is_numeric() auf Zahlenwert geprüft wird und ein Hex-String dadurch ungeschoren durchkommt.


Lo!

variablenübergabe mit $_Get[]

Der folgende Beitrag wurde am 01. 06. 2011, 12:49 Uhr von Cheatah veröffentlicht.

Hi,

> $name = $_GET['name'];
> "SELECT * from test WHERE name=$name"



Cheatah

--
X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4