Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

SevenofNine

Foren Gott

Dabei seit: 30.10.2002

Beiträge: 5 219

 

21 Zum Seitenanfang

Samstag, 7. Januar 2006, 19:29

Gut , das habe ich nun verstanden, danke dir , besonders für die "Bildliche" erklärung.
Was müsste man aber nun ändern, wenn man das script auf einem Server laufen lassen will wo die Register_Globals =On sind? so wie es nun ist würde es ja so oder so laufen, aber wenn ich es auf einem server laufen lasse der die Globals =On hat, dann wären ja dennoch alles türen und Fenster offen!
Also müsste etwas gelöscht werden, nur was?

Gruß

Seven
Bevor du hier Fragen stellst, lese alle Dokumentationen und klicke die folgenden Links um mehr zu erfahren
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
 

Gimli

Kaiser

Dabei seit: 12.02.2003

Beiträge: 1 375

 

22 Zum Seitenanfang

Samstag, 7. Januar 2006, 20:06

Nein, das Script läuft auch auf einem Server mit Globals=On.

Die vorgenommenen Änderungen garantieren lediglich, dass die benötigten Türen offen sind. Wenn der Server alle anderen Türen auch geöffnet hat (Globals=on), tut das nichts zur Sache.

Oder um es anders gesagt: Dieses Script arbeitet in einem höheren Sicherheitslevel (Globals=off) und ist deshalb auch in der Lage in unsichereren Leveln (Globals=on) zu arbeiten. Das umgekehrte ist nicht möglich.

mfg Gimli

EDIT: Ich weiss nicht ob ich deine Frage richtig verstanden habe. Willst du das Script auf einem Globals=on-Server sicherer machen, dh Türen und Fenster schliessen? Das ist nicht möglich. (Oder nicht dass ich wüsste) das ist aber nicht weiter schlimm, denn soweit ich das verstanden habe, handelt es sich nur um eine theoretische Sicherheitslücke. Mir ist kein Fall bekannt, in welchem die Globals=On Einstellung gravierend ausgenutzt wurde.

EDIT2: Das mit den Globals kannst du dir wie folgt vorstellen: Wenn sie aktiviert sind, nimmt der Server Änderungen am Script vor bevor er es ausführt. Darauf hast du keinen Einfluss. (Ob das jetzt technisch genau so abläuft weiss ich nicht, aber für die Vorstellung ist es passend)
"Linux is evolution, not intelligent design." - Linus Torvalds

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Gimli« (7. Januar 2006, 20:13)

 

SevenofNine

Foren Gott

Dabei seit: 30.10.2002

Beiträge: 5 219

 

23 Zum Seitenanfang

Samstag, 7. Januar 2006, 20:52

Also ich glaube wir verstehen gerade nicht richtig.
MAchen wir also mal was neues.
Das nun ergänzte Script, also mit der änderung:
$tab_user=$_REQUEST["tab_user"];
$user_name=$_REQUEST["user_name"];
$user_pw=$_REQUEST["user_pw"];
$tab_navbox=$_REQUEST["tab_navbox"];
$tab_boxname=$_REQUEST["tab_navname"];

So nun läuft das script ja bei globals = On und auch bei global =Off, soweit so gut.

Wenn die Globals aber On sind,habe ich doch noch die unsichrere Methode der übergabe per $user_name im script stehen, oder würde das durch das oben eingefügte nun abgelöst?Also das er nun darauf nicht mehr reagiert und nur noch die "Sichere" Variablen übergabe nimmt?

Ich bin verwirrt.

Gruß

Seven
Bevor du hier Fragen stellst, lese alle Dokumentationen und klicke die folgenden Links um mehr zu erfahren
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
 

Dabei seit: 08.12.2002

Beiträge: 1 220

 

24 Zum Seitenanfang

Sonntag, 8. Januar 2006, 10:18

Zitat

Original von jperl

Zitat

Original von maxtpayne
@seven

PHP-Quelltext

1
2
3
4
5
$tab_user=$_REQUEST["tab_user"];
$user_name=$_REQUEST["user_name"];
$user_pw=$_REQUEST["user_pw"];
$tab_navbox$_REQUEST["tab_navbox"];
$tab_boxname$_REQUEST["tab_navname"];


ergänze das mal ganz am Anfang. Dann sollte das funktionieren.

Greetz

MaxTPayne


zwei = vergessen ;)

PHP-Quelltext

1
2
3
4
5
$tab_user=$_REQUEST["tab_user"];
$user_name=$_REQUEST["user_name"];
$user_pw=$_REQUEST["user_pw"];
$tab_navbox=$_REQUEST["tab_navbox"];
$tab_boxname=$_REQUEST["tab_navname"];



jperl


args nachwehen vom vortag ;)


@seven

ich bin mir nicht ganz sicher aber wenn du explizit sagst die Variable bekomme ich durch ein Formular ($_POST) dann ist auch bei register globals on mehr Sicherheit gegeben weil der variablenwert durch nichts ersetzt wird weil ja nichts über ein Formular übergeben wurde.

Ich hab das jetzt nicht ausprobiert aber das sollte so sein ;).

Da wir aber durch $_REQUEST gesagt haben jeder Weg ist legitim also in unserm Beispiel ob durch das Fenster oder durch die Tür ($_GET oder $_POST) der Einbrecher kommt ist egal weil ich beides akzeptiere.

Greetz

MaxTPayne
 

SevenofNine

Foren Gott

Dabei seit: 30.10.2002

Beiträge: 5 219

 

25 Zum Seitenanfang

Sonntag, 8. Januar 2006, 10:54

Also langsam wird es mir Peinlich,ich glaube ich raff das nicht. *sich so schämt*

Im Urscript werden ja die Variabelen durch $name übergeben, was ja ansich unsicher ist und bei globals =On nicht funzt, wenn wir das nun durch $_REQUEST ergänzen läuft es ja auch bei globals =On. Gut so nun haben wir ein laufendes script was auch sicher ist.

Aber was ist nun wenn wir Globals =Off haben und beide Arten der Übergabe haben?Also es wird per $_REQUEST (Sicher) und $_Name (Unsicher) übergeben, dann mache ich doch einerseits nur bestimme Türen auf und anderseits mache ich doch dann alles auf!
Oder sehe ich das nun verkehrt?

Dann müsste man doch das Script ein wenig umbauen so das alles was $_name ist rauswirft und durch $_REQUEST ersetzt, dann würde es doch bei On und bei Off laufen und es ist dann auch immer sicher.

Gruß

Seven
Bevor du hier Fragen stellst, lese alle Dokumentationen und klicke die folgenden Links um mehr zu erfahren
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
 

Dabei seit: 08.12.2002

Beiträge: 1 220

 

26 Zum Seitenanfang

Sonntag, 8. Januar 2006, 11:46

also wie gesagt es werden ja bestimmte variablenwerte durch bestimmte Übertragungsmethoden übergeben einmal als Anhang an einer URL z.B.:

www.deinedomain.de/index.php?variable=wert

das ist eine Art der Übertragung. Wenn nun register_globals = off ist, ist diese $variable nicht automatisch verfügbar. Das muss man dan so machen z.B.:

PHP-Quelltext

1
$variable=$_GET["variable"];


so nun habe ich $variable in meinem php script initialisiert und kann diese dann auch im weiteren Script verwenden.

Nun kann man auch mit Formulare Daten übertragen. Das ist wiederum eine andere Art der Daten Übertragung.

PHP-Quelltext

1
$variable=$_POST["variable"];


so damit hätte ich die $variable wieder initialisert und könnte diese benutzen und weiterverarbeiten.

Natürlich gib es noch andere Möglichkeiten z.B. Cookies aber das lassen wir mal aussen vor.

Wenn ich nun register_globals = on habe muss ich diese initialiserung nicht machen

Das Problem bei register_globals = on ist das ich z.B. anstatt die Werte über ein Formular zu versenden das auch mit einem Anhang an einer URL machen kann.

Bei einem Webmail ist das ganz unpraktisch denn dann könnte ich in ganz kurzer Zeit einen E-Mail Bomber "bauen".

Beispiel:

Also unser Formular sieht so aus das man einen Namen und einen Text eingeben muss damit man dem Seitenbetreiber eine E-Mail schreiben kann. Beim abschicken wird man zur sendmail.php geleitet.

Wenn jetzt register_globals = on ist und ich in der sendmail.php nicht entsprechend überprüfe ob die Daten von meinem Formular kommen kann ich auch einfach

sendmail.php?name=1337hAx0r&text=viel_spaß_beim_loeschen

aufrufen und dadurch x beliebig viele E-Mails verschicken indem ich die Seite immer wieder aktualisiere.

Nun das ganze wäre nicht passiert wenn ich als Server Konfiguration register_globals=off hätte, denn dadurch wären die Werte von der URL nicht automatisch intialisert worden und somit ständen keine Werte in den Variablen.

Nun das Problem bei $_REQUEST ist das egal welche Art der Datenübertragung ich benutze die variable initialisiert wird. Nun das ist dan so als ob ich für die eine variable register_globals = on setze.

Greetz

MaxTPayne

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »maxtpayne« (8. Januar 2006, 11:48)

 

Gimli

Kaiser

Dabei seit: 12.02.2003

Beiträge: 1 375

 

27 Zum Seitenanfang

Sonntag, 8. Januar 2006, 13:24

Ich glaube ich verstehe Seven's Frage, und maxtpayne's Antwort ist nicht vollständig.

@ Seven, ich führe hier jetzt mal ein Beispielscript an:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if($_REQUEST['login'] != 1){
    $username $_REQUEST['username'];
    $userpw $_REQUEST['userpw'];

    // Datenbankabfrage, ob Benutzer Adminrechte hat
    if (DB-ABFRAGE-FELDINHALT-ADMIN ==1){
        $admin 1;
    }
    else{
        $admin 0;
    }
    //Benutzer jetzt eingeloggt, Cookie setzen oder Session und weiterleiten
}
else{
    // irgendwas, was eingeloggter Benutzer sieht

    // wenn user admin-rechte hat wird noch ein adminmenü eingebunden
    if($admin==1){
        include(adminmenue.php);
    }
}


Das ist nur ein beispiel, und nicht vollständig durchdacht, wo jetzt zb gespeichert wir ob wer admin ist. Aber als Beispiel reichts.
Irgendwie (Cookie, session, Formulareingabe) wird der Wert login übertragen. Ist dieser =1, so ist bereits ein benutzer eingeloggt, wenn nicht findet DB-Abfrage usw startt. Hat der Benutzer Admin-Rechte, wird die Variable $admin 1 gesetzt. Diese Varbiable wird nur während dem einloggen gesetzt.

Auf einem Server mit Globals On könnte ein Hacker jetzt folgende URL eintippen: http://testserver.de/script.php?login=1&admin=1
Da login = 1 ist, ist der Benutzer eingeloggt, und die Variable $admin kriegt den Wert 1, weshalb der Hacker das Adminmenü sieht.
Auf einem Server mit Globals Off gilt der Benutzer zwar als eingeloggt, an der Variable $admin wird aber keine Modifikation vorgenommen (sie ist daher leer).

Um die Sicherheit zu verbessern, könnte man jetzt noch sagen: Der Benutzer ist nur eingeloggt, wenn das Cookie mir diese Information übergibt. Dann müsste in diesesm Beispiel $_REQUEST['login'] durch $_COOKIE['login'] ersetzt werden.

Damit ein Script ausgenutzt werden kann (von einem Hacker) sind folgende Punkte erforderlich: Globals = On, der Hacker muss wissen welche Variable er wie modifizieren muss (entweder ausprobieren, was aber wohl nie Erfolge bringt, oder er kennt den Quelltext)
So, damit sich der Quelltext überhaupt ausnutzen lässt, muss der auch blöd genug sein. Wenn jetzt bei dem Beispiel oben die login-Schleife entfernt wird, wird jedes mal geprüft ob ein Benutzer in der Datenbank steht, auch die Variable $admin wird jedes mal gesetzt (das Script überschreibt dann einen allfällig übergebenen Wert)
Aber auch mit dieser Schleife ist die Verwundbarkeit in der Realität unrealistisch. Ob ein Benutzer Admin ist, ist ja genauso wünschenswert zu wissen wie ob er eingeloggt ist. Dh dieser Wert kommt von "aussen" (ob Cookie, Session oder Formular ist unwichtig). Dh um das Scrip Globals Off tauglich zu machen, würde $admin durch $_REQUEST['admin'] ersetzt werden. Das wäre jetzt angreifbar (bei globals on und off). Aber bei solch sensiblen Daten nimmt man meist zuverlässige Quellen (1. wahl Session oder evtl Cookie).

Die Unsicherheit durch Globals = On ist deswegen eher theoretische Natur, weil der Angreifer umfangreiche Kenntnisse über den Quelltext benötigt, und der Quelltext eine Manipulation zulassen muss (vom logischen Aufbau her). Dass all das zusammenkommt ist sehr unwahrscheintlich (wenn es wirklich eine tragende Sicherheitslücke wäre, hätte wohl kaum ein Server mehr die Globals auf On gesetzt).

Ich hoffe, alle deine Unklarheiten beseitigt zu haben.

mfg Gimli
"Linux is evolution, not intelligent design." - Linus Torvalds
 

SevenofNine

Foren Gott

Dabei seit: 30.10.2002

Beiträge: 5 219

 

28 Zum Seitenanfang

Sonntag, 8. Januar 2006, 13:33

ah, ja danke dir , nun habe ich es auch verstanden.
Ich glaube ich sollte mich doch mal wieder hin setzen und mich versuchen in php zu vertiefen.

Danke an alle!

Gruß

Seven (der mehr als dankbar ist)
Bevor du hier Fragen stellst, lese alle Dokumentationen und klicke die folgenden Links um mehr zu erfahren
WMW Forensuche,
WMW F.A.Q. und/oder
Allgemeine suche
 

Gimli

Kaiser

Dabei seit: 12.02.2003

Beiträge: 1 375

 

29 Zum Seitenanfang

Sonntag, 8. Januar 2006, 13:40

Zitat

Original von SevenofNine
ah, ja danke dir , nun habe ich es auch verstanden.
Ich glaube ich sollte mich doch mal wieder hin setzen und mich versuchen in php zu vertiefen.


Du könntest solche nicht wirklich wichtigen Fragen auch einfach verdrängen :) Ich bin in PHP erfahrener als du, habe mich aber bis zu deiner Frage nie mit den Globals beschäftigt :) Für ein paar Scripte ist es nur wichtig zu wissen, dass man auf Usereingaben mit $_REQUEST['name'] zugreift (damits auch bei Globals off läuft), weswegen das aber so ist, ist unwichtig (Finde ich zumindest).

Zitat


Danke an alle!

np, habe ja auch was gelernt dabei ;)

mfg Gimli
"Linux is evolution, not intelligent design." - Linus Torvalds