Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   mysql abfrage rückgabewert (https://www.delphipraxis.net/125110-mysql-abfrage-rueckgabewert.html)

Delphi-Phil 1. Dez 2008 12:54

Re: mysql abfrage rückgabewert
 
so ist der sql code jetzt:

SQL-Code:
$sql = "SELECT * FROM nl_anmeldungen WHERE md5wert = '$hash'";

Delphi-Phil 1. Dez 2008 13:01

Re: mysql abfrage rückgabewert
 
jetzt möchte ich noch bei richtiger abfrage in die spalte bestaetigung ein true reinschreiben.

Wie mache ich das?

DeddyH 1. Dez 2008 13:03

Re: mysql abfrage rückgabewert
 
SQL-Code:
UPDATE nl_anmeldungen SET bestaetigung = 'TRUE' WHERE md5wert = '$hash'
[edit] Sry, hatte nicht richtig hingesehen. Aber wieso ist das ein Varchar(50)-Feld? [/edit]

Xong 1. Dez 2008 13:10

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Delphi-Phil
so ist der sql code jetzt:

SQL-Code:
$sql = "SELECT * FROM nl_anmeldungen WHERE md5wert = '$hash'";

Nein nein nein! (Und nochmals nein!)

Du musst $hash maskieren:
Code:
$sql = "SELECT * FROM nl_anmeldungen WHERE md5wert = '".mysql_real_escape_string($hash)."'";
Das ist wirklich wichtig! Ein User könnte sonst (vielleicht auch unbeabsichtigt) deiner Datenbank Schaden zufügen. Du glaubst gar nicht, wieviele Hacker sich die Finger nach einer Seite wie deiner lecken.

LG,
Xong

DeddyH 1. Dez 2008 13:17

Re: mysql abfrage rückgabewert
 
Siehe dazu auch hier: http://www.unixwiz.net/techtips/sql-injection.html

Delphi-Phil 1. Dez 2008 13:44

Re: mysql abfrage rückgabewert
 
danke an xong das du mich so ausdrücklich auf die sicherheit hinweißt!!
Wirklich toll von Dir!!

Muss ich diesen Code den auch so schützen?

SQL-Code:
$sql1 = "UPDATE nl_anmeldungen SET bestaetigung = 'true' WHERE md5wert = '$hash'";

DeddyH 1. Dez 2008 13:52

Re: mysql abfrage rückgabewert
 
Unbedingt. Lass Dir das SQL mal ausgeben (nur ausgeben, nicht ausführen :!: ), wenn man folgenden Hash übergibt:
Code:
' OR 1=1;DELETE FROM nl_anmeldungen WHERE 'A' = 'A

Valle 1. Dez 2008 14:01

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Xong
Nein nein nein! (Und nochmals nein!)

Du musst $hash maskieren:

Einspruch!

Ich wette, dass der Server, auf dem Delphi-Phil arbeitet, standardmäßig Magic Quotes aktiviert hat. Dein escapen führt damit zu noch mehr Problemen. Also entweder vorher noch stripslashes() anwenden, alle $_POST, $_GET usw. -Variablen komplett durch stripslashes laufen lassen, oder einfach das Escapen weglassen.

Edit:// @DeddyH: Dein Code funktioniert nicht, da du mit MySQL-Query nur ein Query ausführen kannst. Ein Semikolon führt zu einem SQL-Syntax-Fehler. ;-)

Mit freundlichen Grüßen,

Valle

DeddyH 1. Dez 2008 14:04

Re: mysql abfrage rückgabewert
 
Der erste Teil genügt aber für den Login ohne Account.

Xong 1. Dez 2008 14:04

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Delphi-Phil
danke an xong das du mich so ausdrücklich auf die sicherheit hinweißt!!
Wirklich toll von Dir!!

=)
Ist ja auch gar nicht böse gemeint. Aber bei sowas muss man immer mit Nachdruck schreiben, damit´s auch wirklich hängen bleibt. Ich habe schon so viele Seiten gesehen, auf denen Sachen wie "This site was hacked by..." standen.
Außerdem können solche Seiten den zugrundeliegenden Server zu Spamschleudern machen und dann kannst du sogar rechtliche Probleme bekommen.

Zitat:

Zitat von Delphi-Phil
Muss ich diesen Code den auch so schützen?

SQL-Code:
$sql1 = "UPDATE nl_anmeldungen SET bestaetigung = 'true' WHERE md5wert = '$hash'";

Also...
Du musst alles schützen, was von außen kommt, also alles was nicht in deinem Skript definiert wird.

Beispiel:
Du hast im HTML sowas stehen:
Code:
<label for="name">Name:</label> <input type="checkbox" name="name" id="name" />
Im PHP setzt du dann folgende SQL-Abfrage ab:
Code:
mysql_query("INSERT INTO table (name) VALUES('".$_POST['name']."')")
Was glaubst du, was passiert, wenn in Name '); DROP TABLE table;-- steht?

Du würdest folgenden Code an die Datenbank schicken:
SQL-Code:
INSERT INTO table (name) VALUES(''); DROP TABLE table;--')
Es wären noch viel schlimmere Dinge möglich. Jemand könnte versuchen Zugriff auf deine Datenbank zu bekommen, indem er die Passwörter ändert.
Vielleicht sogar so, dass du es gar nicht merkst, indem er einfach nur einen neuen Benutzer hinzufügt. Viels ist möglich. Und du musst das verhindern.

Richtig wäre in PHP folgendes:
Code:
mysql_query("INSERT INTO table (name) VALUES('".mysql_real_escape_string($_POST['name'])."')")
Dann wird nämlich
SQL-Code:
INSERT INTO table (name) VALUES('\'); DROP TABLE table;--)'
abgeschickt und alles wäre in Ordnung.


Merke: All Input Is Evil!

LG,
Xong

Valle 1. Dez 2008 14:06

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von DeddyH
Der erste Teil genügt aber für den Login ohne Account.

Solange die genannten Magic-Quotes aus sind,
oder der Input erst demaskiert wird schon. ;-)

Mit freundlichen Grüßen,

Valle

Xong 1. Dez 2008 14:12

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Valle
Ich wette, dass der Server, auf dem Delphi-Phil arbeitet, standardmäßig Magic Quotes aktiviert hat. Dein escapen führt damit zu noch mehr Problemen. Also entweder vorher noch stripslashes() anwenden, alle $_POST, $_GET usw. -Variablen komplett durch stripslashes laufen lassen, oder einfach das Escapen weglassen.

Unwahrscheinlich. Magic Quotes sind standardmäßig aus. Und wenn nicht, dann sollte das schleunigst passieren!

Zitat:

Zitat von Valle
Edit:// @DeddyH: Dein Code funktioniert nicht, da du mit MySQL-Query nur ein Query ausführen kannst. Ein Semikolon führt zu einem SQL-Syntax-Fehler. ;-)

Da hast du recht. Das habe ich auch nicht bedacht. Allerdings ist das irrelevant. Es kann schließlich auch ausversehen passieren, dass ein User sich mit O'Brian anmelden möchte. Der bekommt dann auch nur eine sinnlose Fehlermeldung.

Zudem ist es mit mysqli durchaus möglich mehrere Abfragen abzusetzen.

LG,
Xong

Valle 1. Dez 2008 14:14

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Xong
Unwahrscheinlich. Magic Quotes sind standardmäßig aus. Und wenn nicht, dann sollte das schleunigst passieren!

Nein, die sind standardmäßig an. Auf jedem Hoster von den Vielen, die ich probiert habe und auch auf meinem eigenen Hoster. ;-) Achja, und natürlich auch in der Standard-PHP.ini. In PHP6 wird es die Magic Quotes nicht mehr geben. Leider hat PHP da Scheiße gebaut, denn einfach abschalten wird zu vielen, sehr sehr vielen Problemen führen...

Zitat:

Zitat von Xong
Da hast du recht. Das habe ich auch nicht bedacht. Allerdings ist das irrelevant. Es kann schließlich auch ausversehen passieren, dass ein User sich mit O'Brian anmelden möchte. Der bekommt dann auch nur eine sinnlose Fehlermeldung.

Zudem ist es mit mysqli durchaus möglich mehrere Abfragen abzusetzen.

Ich wollte es nur gesagt haben. ;-) Mit MySQLi habe ich das bisher nicht getestet.

Mit freundlichen Grüßen,

Valle

Xong 1. Dez 2008 14:25

Re: mysql abfrage rückgabewert
 
Zitat:

Zitat von Valle
Zitat:

Zitat von Xong
Unwahrscheinlich. Magic Quotes sind standardmäßig aus. Und wenn nicht, dann sollte das schleunigst passieren!

Nein, die sind standardmäßig an.

Boah, du hast recht. :wall:
Naja, wie gesagt: Wech damit!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz