Administratie Paneel beveiligen

Status
Niet open voor verdere reacties.

mrprozac

Gebruiker
Lid geworden
16 jul 2008
Berichten
183
Goedendag,

Ik ben nu al een enkele maanden bezig met het schrijven van een PHP website. Nu de front-end grotendeels klaar is ben ik begonnen met de back-end (admin paneel).

Ik heb ervoor gekozen om groepen aan te maken omdat deze paneel (deels) beschikbaar wordt gesteld voor moderators. Hiervoor heb ik een tabel aangemaakt met usergroups en wil groepen met de ID 2 t/m 4 toegang bieden tot de adminpaneel.

Als een gebruiker inlogt maakt PHP een aantal sessie variabelen aan zoals logged (boolean), userid, username, logins ed. Nu wil ik dat PHP onderscheid maakt tussen users met administratorrechten en zonder.

Welke van de onderstaande zal het beste (en veiligste) zijn?
PHP:
if (isset($_SESSION['logged'])){
	$user=$_SESSION['user'];
	$sql="SELECT `id`,`group` FROM users WHERE id = '$user' AND `group` BETWEEM 2 AND 4";
	$cmd=mysql_query($sql);
	if(!$cmd){
		header("Location: /index.php");
	}else{
		header("Location: index.php");
	}
}

en:
PHP:
if (isset($admin)){
	if (!isset($_SESSION['admin'])) {
		header("Location: /index.php");
		exit();
	}
}


Deze code wordt in de init.php bestand geplaatst die wordt geladen door iedere pagina. Voor pagina's waar gebruikers voor moeten inloggen defineer ik eers $secure met een willekeurige waarde (1 in de meeste gevallen), de init.php controleerd vervolgens of de gebruiker is ingelogd en laad login.php indien dit niet het geval is.

Voor de adminpaneel wil ik hetzelfde doen, maar dan wel met een andere variabel (bijv. $admin).

Groet,
Oguzhan
 
Ik zou de tweede kiezen omdat een connectie met een database onnodig is als je wilt checken of de sessie is aangemaakt of niet.
 
Ik zou de tweede kiezen omdat een connectie met een database onnodig is als je wilt checken of de sessie is aangemaakt of niet.

Bedankt voor de snelle antwoord.

De connectie wordt automatisch aangemaakt door een class op het moment dat er een SQL opdracht wordt opgegeven.
De index pagina van de administratie paneel voert al een aantal SQL opdrachten uit om statistieken en cases op te vragen.
 
Manier 1 slaat sowieso nergens op.

Als je je administratiepaneel wilt beveiligen, begin dan met je query. Je doet daar niets aan input beveiliging en dit is dus heel erg SQL Injection-gevoelig. Begin daar eens mee.

Je if-statement daarna klopt al helemaal niet:

if(!$cmd){
header("Location: /index.php");
}else{
header("Location: index.php");
}

Je checkt hier of de query gelukt is, niet of de query resultaat heeft.
 
Manier 1 slaat sowieso nergens op.

Als je je administratiepaneel wilt beveiligen, begin dan met je query. Je doet daar niets aan input beveiliging en dit is dus heel erg SQL Injection-gevoelig. Begin daar eens mee.

Je if-statement daarna klopt al helemaal niet:

if(!$cmd){
header("Location: /index.php");
}else{
header("Location: index.php");
}

Je checkt hier of de query gelukt is, niet of de query resultaat heeft.

Du variabel in de sql query ($user) wordt uit de sessie gehaald dat door de server wordt aangemaakt. De bezoeker heeft hier zover ik weet geen invloed op sinds deze variabelen tijdens het inloggen worden aangemaakt.

Alle formulieren op de website hebben een beveiliging tegen SQL injection.
PHP:
function form($data) { // Prevents simple SQL Injection
	$db = new db2_class;
	$data = preg_replace("[\'\")(;|`,<>]", "", $data);
	$data = mysql_real_escape_string(trim($data), $db->connect());
	return stripslashes($data);
}

PS. de code dat u heeft aangekaart is inmiddels gecorrigeerd. Bedankt
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan