Toon posts:

[PHP] Admin script werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ey,

Ik heb het volgende scriptje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
include("../config.php");

$adminid=$HTTP_COOKIE_VARS[adminid];

$query=mysql_query("SELECT password FROM admins WHERE id='$adminid'");
while ($b=mysql_fetch_array($query))
{
    if ($b[password] != $HTTP_COOKIE_VARS[adminpass])
    {
        header("location: index.php");
    }
}

?>
<html>
<head>
etc.
?>

Allereerst moet een username en password opgegeven worden op /admin/index.php. Deze gegevens worden in een cookie gezet en de gebruiker wordt geforward naar frames.php. In deze frames.php staat bovenstaand script. Een echo met de cookievars levert het juiste resultaat (het ingevoerde password), evenals de echo van $b[password] (de juiste pass). Maar toch wordt ik niet geforward naar index.php wanneer het password fout is. Het zit blijkbaar in deze regel:
PHP:
1
2
3
<?
if ($b[password] != $HTTP_COOKIE_VARS[adminpass])
?>

Maar ik zie het probleem niet? Jij misschien wel?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ten eerste, als er GEEN waarde in je cookies zitten wordt je wel doorgestuurd (door die while sla je dan de if daarbinnen over).

Daarnaast kan het goed zijn dat je na je header(...) nog even exit; ofzo moet aanroepen om verdere executie van je script te voorkomen.

Verwijderd

welke error krijg je?
Is je query wel juist, ik veronderstel dat id een integer is, waarom staan er dan ' rond?

Verwijderd

Topicstarter
Ik krijg geen error, hij laat gewoon de rest van de pagina zien ipv dat ie forward naar index.php omdat het password niet juist is.

Tis het afgeschermde gedeelte.

Als een cookie niet bestaat hoort ie ook te forwarden dus.

De ' heb ik al es weggehaald maar had ze nu weer ff teruggezet. Helpt beide niet :). En zoals ik zei, uit de query komt wel het juiste wachtwoord.

Verwijderd

Op zondag 13 januari 2002 21:49 schreef Frank83 het volgende:
Ik krijg geen error, hij laat gewoon de rest van de pagina zien ipv dat ie forward naar index.php omdat het password niet juist is.

Tis het afgeschermde gedeelte.

Als een cookie niet bestaat hoort ie ook te forwarden dus.

De ' heb ik al es weggehaald maar had ze nu weer ff teruggezet. Helpt beide niet :). En zoals ik zei, uit de query komt wel het juiste wachtwoord.
PHP:
1
2
3
4
5
<?
if ($b[password] != $HTTP_COOKIE_VARS[adminpass]) {
    header("location: index.php");
}
?>

dit moet zijn
PHP:
1
2
3
4
5
<?
if ($b['password'] != $HTTP_COOKIE_VARS['adminpass']) {
    header("location: index.php");
}
?>

(' toevoegen, je kan uiteraard ook " gebruiken)

Verwijderd

Topicstarter
Het werkt!

Jouw oplossing met de ' was nog niet genoeg, maar was wel nodig :). Er zat ook nog een fout in index.php waardoor frames.php naar index.php forwarde, en deze op zijn beurt weer naar frames.php forwarde. Een loop dus :).

Bedankt voor de tips allen!

  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Toch nog een vraagje: heb je hem nu veilig gemaakt ook?!?
Want als in je originele query adminid leeg was, of je er iets raars voor invulde (wat mogelijk is, het komt tenslotte van de client kant), dan geeft mysql geen resultaten of een foutmelding, wordt de while niet uitgevoerd en krijg je de pagina te zien.....

Verwijderd

Topicstarter
Het admin id wordt uit de database gehaald. De gebruiker haalt met behulp van een drop down menuutje zijn naam eruit waar die ID aan gekoppeld is. Dus dat is onmogelijk :).

Gebruik overigens ook not .htaccess hoor, dus veilig is het sowieso wel. Maar in die cookies staat ook handige info opgeslagen, dan is het een kleine moeite om er een inlogsysteem van te maken :).
Pagina: 1