Gå til innhold

Adgang blir endret ved å endre brukerinformasjon om annen bruker


Anbefalte innlegg

hei.

 

Har dette scriptet:

 

 

 

<table border="0" cellspacing="0" cellpadding="0" width="550">
	<tr>
	  <td class="pageName">Administator Panel -> Bruker Administrasjon</td>
	</tr>

	<tr>
	  <td class="bodyText">
	<?php if($l['admin'] >= 5) { ?>
	<?php
		$u = mysql_query("SELECT * FROM `user`");
	?>

<?php
if(isset($_GET['delete'])) {
$id3 = quote_smart($_GET['delete']);
$idd = mysql_query("SELECT * FROM `user` WHERE `id`='$id3' LIMIT 1");
$idd = mysql_fetch_array($idd);
if($id == $_SESSION['id']) {
echo "Du kan ikke slette deg selv.";
}
elseif($idd['admin'] >= $l['admin'])  {
echo "Du kan ikke slette brukere med høyere adgang enn deg.";
}
else {
$delete = mysql_query("DELETE FROM `user` WHERE `id`='$id' LIMIT 1");
echo "Brukeren <b>".$idd['username']. "</b> er slettet.";
}

}

if(isset($_GET['edit'])) {
$id = quote_smart($_GET['edit']);
$idd = mysql_query("SELECT * FROM `user` WHERE `id`='$id' LIMIT 1");
$idd = mysql_fetch_array($idd);
if(!$idd) {
echo "<b>$id</b> er en ugyldig id!";
}
elseif($idd['admin'] >= $l['admin'] && $idd['id'] != $l['id']) {
echo "Du kan ikke endre en annen admin med høyere status enn deg.";
}
else
{
if(isset($_POST['endre'])) {

$navn = quote_smart($_POST['username']);
$email = quote_smart($_POST['email']);
$rank = quote_smart($_POST['rank']);
$admin = quote_smart($_POST['admin']);

if(!is_numeric($rank)) {
echo "rank må være et tall";
}
elseif(!is_numeric($admin)) {
echo "Admin må være ett tall";
}
else
{

$upt = mysql_query("UPDATE `user` SET `username`='$navn', `email`='$email', `rank`='$rank', `admin`='$admin' WHERE `id`='$id'");
echo "Brukeren har blitt oppdatert!";
}

}
?>
<form method="POST" action="">
<table>
<tr>
<td>ID
</td>
<td><?php echo $idd['id']; ?>
</td>
</tr>

<tr>
<td>Brukernavn
</td>
<td><input type="text" name="username" value="<?PHP echo $idd['username']; ?>" />
</td>
</tr>

<tr>
<td>Epost
</td>
<td><input type="text" name="email" value="<?PHP echo $idd['email']; ?>" />
</td>
</tr>

<tr>
<td>rank
</td>
<td><select name="rank"><option value="0" <?php if($idd['rank'] == 0) { echo "selected=\"selected\""; } ?>>0</option><option value="1" <?php if($idd['rank'] == 1) { echo "selected=\"selected\""; } ?>>1</option><option value="2" <?php if($idd['rank'] == 2) { echo "selected=\"selected\""; } ?>>2</option></select>
</td>
</tr>

<tr>
<td>Admin
</td>
<td><select name="admin"><option value="0" <?php if($idd['admin'] == 0) { echo "selected=\"selected\""; } ?>>0</option><option value="1" <?php if($idd['admin'] == 1) { echo "selected=\"selected\""; } ?>>1</option><option value="2" <?php if($idd['admin'] == 2) { echo "selected=\"selected\""; } ?>>2</option><option value="3" <?php if($idd['admin'] == 3) { echo "selected=\"selected\""; } ?>>3</option><option value="4" <?php if($idd['admin'] == 4) { echo "selected=\"selected\""; } ?>>4</option><option value="5" <?php if($idd['admin'] == 5) { echo "selected=\"selected\""; } ?>>5</option><?php if($idd['admin'] >= 5) { ?><option value="6" <?php if($idd['admin'] == 6) { echo "selected=\"selected\""; } ?>>6</option><?php } ?></select>
</td>
</tr>

<tr>
<td>Ferdig?
</td>
<td><input type="submit" name="endre" value="Endre" />
</td>
</tr>
</table>
</form>
<?php


}

}
?>
	<table width="600">
	<tr>
	<td width="50px">
	</td>
	<td width="100px">
	Brukernavn
	</td>
	<td width="200px">
	Email
	</td>
	<td width="125px">
	Rank
	</td
	<td width="125px">
	Admin
	</td>
	</tr>

	<?php
	while($user=mysql_fetch_array($u)) {
	?>
	<tr>
	<td width="50px">
	<a href="?p=adm_user&delete=<?php echo $user['id']; ?>" onclick="java script: confirm('Vil du virkelig slette denne brukeren?');">X</a> | 
	<a href="?p=adm_user&edit=<?php echo $user['id']; ?>">R</a>
	</td>
	<td width="100px">
	<?php echo $user['username']; ?>
	</td>
	<td width="200px">
	<?php echo $user['email']; ?>
	</td>
	<td width="125px">
	<?php echo $user['rank']; ?>
	</td
	<td width="125px">
	<?php echo $user['admin']; ?>
	</td>
	</tr>
	<?php
	}
	?>
	</table>
	<?php } else { echo "Ingen adgang"; } ?>
  </td>
	</tr>
  </table>

 

 

 

hvor $l['*']; variabelen er om brukeren jeg er. problemet er at jeg har to brukere. Eivind og Demo, jeg er innlogget som Eivind og skal endre Demo sin brukeradgang litt høyere for at den skal ha tillgang til andre ting. men når jeg prøver på det får jeg Ingen Adgang ( blir printet ut nederst i scriptet ). det jeg tror er at brukeren Eivind får da tillgangen til Demo. Jeg finner ikke ut hvor i scriptet tillgangsrettighetene blir endret, så jeg håpet at noen andre her fant dem?

 

TaKk for de som gidder å lete

Endret av LaCrouX
Lenke til kommentar
Videoannonse
Annonse

Siden det ikke er du som har skrevet skriptet så gidder jeg ikke lete i det.

 

Det jeg vil gjøre er å fortelle deg litt om hvordan rettigheter til filer fungerer i linux (med venner).

 

En fil i linux har tre rettighetsgrupper som styrer lese-, skrive-, og kjøretilganger.

 

Eier: Den brukeren som eier (veldig ofte den som opprettet) filen.

Gruppe: Medlemmer av samme gruppe som filen tilhører (som oftest eieren her også)

Andre: Alle andre brukere på systemet.

 

For at en bruker skal kunne lese en fil så må en av tre kravsammensetninger være oppfylt:

ENTEN så må brukeren være eier av filen og eieren ha tilgang til å lese filen

ELLER så må brukeren være medlem av samme gruppe som filen og gruppen ha tilgang til å lese filen

ELLER så må filen være lesbar av alle brukere i systemet.

 

Vær også obs på at disse kravgruppene må gjelde for alle kataloger i treet som leder frem til filen og at brukeren må ha kjørerettigheter til katalogen(e).

 

Når du oppretter en fil i et skript så er det en veldig vanlig misforståelse at eieren av skriptet blir eier av filer som skriptet oppretter. Dette er IKKE tilfellet. Hvis et skript oppretter en fil så er det eieren av prosessen som kjører skriptet som blir eier av filen som skriptet oppretter.

 

Dette er viktig i de tilfeller hvor et skript blir kjørt i fra en nettside da det her er en ikke-bruker (www, www-data, apache eller liknende) som kjører skriptet. Da er det viktig at skriptet også gir tilgang til den/de brukeren som skal ha tilgang til skriptet.

 

For mer informasjon se: http://tinyurl.com/yewlbh

Lenke til kommentar
Siden det ikke er du som har skrevet skriptet så gidder jeg ikke lete i det.

 

Det er det jeg som har skrevet, så det er greit. Og det du skriver har INGEN sammenheng med scriptet mitt.

Og om du ikke har noen peiling;

 

Jeg tror den brukeren som endrer en annen bruker får adgangen til denne andre brukeren.

Endret av Skagen
§1
Lenke til kommentar
Siden det ikke er du som har skrevet skriptet så gidder jeg ikke lete i det.

 

Det er det jeg som har skrevet, så det er greit. Og det du skriver har INGEN sammenheng med scriptet mitt.

Og om du ikke har noen peiling;

 

Jeg tror den brukeren som endrer en annen bruker får adgangen til denne andre brukeren.

Det du da gjør er å skrive ut Eivind sin brukertilgang på utvalgte steder i skriptet og se om den endres. Skriv gjerne ut demo sin brukertilgang i samme slengen.

 

http://php.net/var_dump og http://tinyurl.com/bvrhw

 

Et par tips angående kodestrukturen din:

Jeg ser at du bruker $_GET['delete'] og $_GET['edit'] så det gjør at jeg antar at URIen som blir sendt til skriptet er enten skript.php?edit=true... eller skript.php?delete=true...

 

Dette er en dårlig fremgangsmåte. Det jeg vil anbefale at du bruker istedenfor er skript.php?action=edit.. og skript.php?action=delete...

 

Da kan du gjøre følgende i koden

switch ($_GET['action'])
{
 case '':
//No action to perform. Exit with an error
break;
 case 'delete':
if(check_access($_GET['id'], $_SESSION['id']))
{
  delete_user($_GET['id']);
}
break;
 case 'edit':
if(check_access($_GET['id'], $_SESSION['id']))
{
  edit_user($_GET['id']);
}
break;
}

//Display results from operation...

function chec_access($target, $source)
{
 //Check that $source has got access to alter $target and return true if it has.
}

function delete_user($user_id)
{
 //Sanity check input and perform delete
}

function edit_user($user_id)
{
 //Sanity check input and perform delete
}

 

På den måten så blir det MYE enklere å følge kodeflyten og følgelig også å feilsøke.

 

...og hvis det faktisk ER du som har skrevet dette så vil en manglende evne til å feilsøke skriptet indikere at du ikke aner hva du driver med. :D

Endret av BlueEAGLE
§1
Lenke til kommentar

Eller så kan jeg jo print $l['admin'] og print $idd['admin'], Da de allerede er hentet ut ifra arrayen.. Men det vet jo seffølgelig du som er så god i php?

 

Edit: Kan legge til at det fungerer uten problemer localhost, men funker ikke på nettet.

 

Løste problemet mysterisk :)

Endret av LaCrouX
Lenke til kommentar

Hold dere saklige. Ingen vits i å antyde ting om hverandre og krangle, det kommer ingenting konstruktivt ut av det. Et par innlegg er redigert grunnet usakligheter og personangrep.

 

(Vennligst ikke kommenter dette innlegget. Reaksjoner på moderering gjøres pr. PM/melding)

Lenke til kommentar

Nå kom problemet tilbake igjen mystisk :S

 

...og hvis det faktisk ER du som har skrevet dette så vil en manglende evne til å feilsøke skriptet indikere at du ikke aner hva du driver med. :D

Da føles det bra at dette er èn av 279 - 10-12 bilder som jeg har klart å fikse uten å spørre noen selv :)

Endret av LaCrouX
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...