mySQL Einträge und register_globals = Off

Die Scriptsprache PHP für die Gestaltung von dynamischen Websites.

mySQL Einträge und register_globals = Off

Beitragvon radditz » Di 08 Jul, 2003 20:59

Also ich hätt mal schnell ein paar Fragen
wenn ich jetzt ein Script habe, mit den sich ein user registrieren kann, kann er ja z.B. die mySQL Einträge umgehen (z.B. adminrights auf 1 setzen), das gleiche bei Update...
also wie kann ich dass jetzt verhindern, dass man da gleich etwas reinschreiben kann, womit mein script unsicher ist?

und meine 2. Frage
wenn ich register_globals = Off habe, was muss ich dann im gegenteil zu On beachten.
Also auf jeden fall mal $_POST und $_GET, falls Variablen übergeben werden.
Was is bei Cookies? da bleibt das $HTTP_COOKIE_VARS oder?
und kann ich bei Funktionen global $varname; machen oder gehts dann einfacher?
(hab gehört über $_GLOBAL[varname], bin mir eben nicht sicher).
wenns noch was wichtiges gibt, sagts mir bitte
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon Gustavo el Geranie » Mi 09 Jul, 2003 12:08

mysql:

Wenn du die query so machst, kann nichts schief gehen:

[php]
<?php
ini_set('magic_quotes_runtime','1'); // das brauchst du, um sql injections zu vermeiden
$username=$_GET['username'];
$password=$_GET['password'];
// check hier, ob dein user nicht Blödsinn eingibt
...
$sql="INSERT INTO users (username, password, admin_rights) VALUES ('$username', '$password', 0)";
// achtung, setze hier _alle_ (auch numerische) vom user eingegebene Daten unter einfache hochkommas
?>
[/php]

Wenn du die admin_rights direkt stzt, kann sie niemand überschreiben.
Gustavo el Geranie
Neu im Board
Neu im Board
 
Beiträge: 14
Registriert: Mo 23 Jun, 2003 16:10

Beitragvon radditz » Mi 09 Jul, 2003 13:09

also das unter Hochkomma setzen mach ich immer, danke erstmal
aber bei Update kann der User ja immernoch gewisse Sachen verändern...
hilft da addslashes?
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon Gustavo el Geranie » Mi 09 Jul, 2003 23:03

naja, ich sehe nicht den großen Unterschied
[php]
<?php
ini_set('magic_quotes_runtime','1'); // das brauchst du, um sql injections zu vermeiden
$username=$_GET['username'];
$password=$_GET['password'];
// check hier, ob dein user nicht Blödsinn eingibt
...
$sql="UPDATE users SET username='$username' , password='$password' WHERE username='$oldusername' ";
// achtung, setze hier _alle_ (auch numerische) vom user eingegebene Daten unter einfache hochkommas
?>
[/php]
da kann wohl auch nichts schief gehen
Gustavo el Geranie
Neu im Board
Neu im Board
 
Beiträge: 14
Registriert: Mo 23 Jun, 2003 16:10

Beitragvon radditz » Do 10 Jul, 2003 08:52

naja, der user könnte ja z.B. folgendes machen:
datei.php?username=wasweisich&password=1234', adminrights='1
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon WannabeArtist » Di 29 Jul, 2003 09:26

Nein, der Benutzer kann nix umgehen, da bei
Code: Alles auswählen
$sql="INSERT INTO users (username, password, admin_rights) VALUES ('$username', '$password', 0)";

der Wert für admin_rights festgeschrieben ist. Alle Eingaben des Benutzers, abgesehen von $username und $password werden schlichtweg ignoriert, da kann der Benutzer noch so viel herumprobieren, wenn die Variable $admin_rights nicht verwendet wird, ist sie dem PHP Skript auch vollkommen egal.
WannabeArtist
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 37
Registriert: Di 29 Jul, 2003 09:11
Wohnort: Wien


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste