Webstatt.org - Community seit 2006 - 2012 (2024?)

sicherheitsabfragen

Avatar user-279
19.04.2006 07:19

moin.

wie macht ihr das bei grösseren seiten mit den sicherheitsabfragen - also wer was sehen darf und was nicht?
ich weiss nicht genau wie ich es am besten mache - ich habe 4 benutzergruppen die unterschiedliche session werte haben - bisher hab ich einfach in jeder datei die "intern" ist eine abfrage:

if ($_SESSION['group'] < 4) {
die('Keine Berechtigung!'zwinkern;
}


ich find das aber ziemlich mühsam - wenn ich nachträglich was an des sessions schraube muss ich in jeder datei nachkorrigieren.

hat mir jemand eine bessere möglichkeit?
danke - user-279

Avatar user-125
19.04.2006 07:58

Wenn du keine Datei hast, die du in alle Datein includest, wirst du um das ändern aller Datein nicht herum kommen.

Liebe user-125y aka user-125 aka dionysos
Avatar user-279
19.04.2006 08:03

mhm daran hab ich schon gedacht aber dann muss ich ja für jede berechtigungsstufe eine andere datei haben..geht das nur so?

Avatar user-255
19.04.2006 08:18

Nööh. In deiner global.php definierst du je nach Sicherheitsstufe ein paar Konstanten:
<?php
switch ($_SESSION['group'])
{
case 3:
define('DARF_INS_ACP', true);
case 2:
define('DARF_MODERIEREN', true);
case 1:
define('DARF_POSTEN', true);
default:
define('DARF_AUFS_KLO', true);
}
?>

Anm: Das Durchfallen is Absicht. So darf auch der Admin aufs Klo.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-279
19.04.2006 08:23

gefällt mir schon besser lächeln
ich probiers mal aus - vielen dank schonmal!

/edit - die konstanten muss ich ja aber auch abfragen..wo ist der unterschied?

Avatar user-279
20.04.2006 06:42

öhm - user-255 hast du mein edit gelesen lächeln?
ich wäre froh wenn mir jemand weiterhelfen könnte.

danke euch

Avatar user-253
20.04.2006 08:04

Wenn ich user-255s Post richtig interpretiere, hat er den user-129utzergruppen direkt Rechte zugeordnet, beispielsweise DARF_INS_ACP
Du müsstest dann wenn jemand ins ACP abfragen:
if (defined(DARF_INS_ACP)) {
// ACP
} else {
// access denied
}


Alternativ könntest du auch viermal den gleichen Konstantennamen verwenden mit je unterschiedlichen Zahlen werden, dann wären diese ordbar, beispielsweise

switch ($_SESSION['group'])
{
case 3:
define('USER_ACCESS_LEVEL', 3);
case 2:
define('USER_ACCESS_LEVEL', 2);
case 1:
define('USER_ACCESS_LEVEL', 1);
default:
define('USER_ACCESS_LEVEL', 0);
}
if(USER_ACCESS_LEVEL>=2) {
// ok
} else {
// access denied
}


Allerdings hätten dann übergeordnete Gruppen alle Rechte der Unteren, ich weiß nicht ob das gewollt ist. Sinnvoll wäre es sicher nicht.

Meiner Meinung nach die beste Möglichkeit ist, die user-129utzer Gruppen zuzuordnen und den Gruppen Rechten und dann bei einer Aktion abzufragen ob der User in einer Gruppe mit diesem Recht ist.

Avatar user-279
20.04.2006 11:02

danke.

aber dann muss ich ja trotzdem in jeder datei die zum acp gehört diese abfrage reinschreiben oder?

Avatar user-325
20.04.2006 11:09

Du kannst sie ja auch includen. user-158n bleibt das Ganze etwas übersichtlicher zwinkern

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Avatar user-253
20.04.2006 11:11

Ja natürlich.
Das halte ich aber nicht für übertrieben sondern eher für angebracht auf jeder geschützten Seite die Berechtigung zu prüfen. Vielleicht hast du alternativ eine Datei, die von allen Elementen des ACP benutzt wird, wenn ja könntest du dort die Prüfung integrieren. Hast du so eine Datei nicht, könntest du sie auch includen, das wäre dann aber "genau" das Gleiche (du könntest dort natürlich noch mehr machen und später leichter die Prüfung ändern) wie eine Rechteprüfung.

Michael

Avatar user-279
20.04.2006 12:06

ah eben - dacht ichs doch lächeln
dann schreib ich wahrscheinlich in jede datei:

define('NEEDED_LEVEL', 4);


und in der global.php:

if ($_SESSION['group'] < NEEDED_LEVEL) {
header('Location: ?load=error'zwinkern;
}


ich denke das macht sinn?
danke für eure hilfe!

/edit.
das funzt nicht traurig - auch mit genügend rechte komm ich zu der fehler seite.

Avatar user-255
20.04.2006 12:25

Lass dir doch mal beide Werte ausgeben.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-162
20.04.2006 12:36

mach doch noch ein exit; unter dein header();

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-279
20.04.2006 12:36

wenn ich in der global.php folgendes habe:

if ($_SESSION['group'] < NEEDED_LEVEL) {
echo NEEDED_LEVEL;
}


gibt es "NEEDED_LEVEL" aus - mein define() wird also gar nicht beachtet.
die global.php wird halt ganz oben in der index includet.

Avatar user-325
20.04.2006 13:04

Wird denn die Konstante vor der Abfrage definiert?

PHP spricht hebräisch. lächeln
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
Avatar user-255
20.04.2006 13:19

define() is komisch. Versuch mal, den Konstanten-Namen ohne Hochkommas zu schreiben oder in doppelten Anführungszeichen.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-279
20.04.2006 13:29

nein das hilft leider auch nicht. die bedingung wird einfach vor der definierung von NEEDED_LEVEL geprüft. kann man das irgendwie umgehen?

Avatar user-162
20.04.2006 15:43

Original von user-279
die bedingung wird einfach vor der definierung von NEEDED_LEVEL geprüft.

Fettes Grinsen lool... ist ja klar wenn dus nicht definiert hast wirds auch nid funktionieren...

probiers doch mal so:


<?php
$group = 1;
define('NEEDED_LEVEL', 6);
if ($group < NEEDED_LEVEL) {
//echo NEEDED_LEVEL;
header('Location: ?load=error'zwinkern; // lädt zu deiner Error seite
exit; // verhindert dass deine Seite weiter geladen wird
}
// Rest von der Seite
?>

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-279
20.04.2006 17:29

ich kann ja NEEDED_LEVEL nicht in der global.php definieren - das muss ja in der datei stehen.

Avatar user-168
20.04.2006 17:52

Ja, in der Datei die Zuweisung machen und dann (!) erst die global.php da includen.

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-279
21.04.2006 06:50

:tired:die global.php wird aber schon auf der index.php includet.
ich komme wohl nicht darum für jede geschützte datei eine seite zu includen..