Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Seite 5 von 6   « Erste     345 6      

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