Gå til innhold

Administrasjonssystem


Anbefalte innlegg

Holder på med et medlemsadministrasjonssystem.

 

Har for det meste gjort ferdig brukerdelen, dvs. der hvor de registrerer seg, oppdaterer medlemsinfo osv. Har nå begynt på admin-delen, som er litt mer kmpleks.

 

Har tenkt å lage en rekke scripts, som gjør hver sin ting, som søking, oppdatering, sletting, og vising av info. For at ikke alle og enhver skal få tilgang på dette, så nå jeg ha et enkelt og sikkert innloggingssystem. Tenkte på noe ala at man går inn på admin.html, hvor man skriver inn id og passwd, og så har man tilgang til scriptene update.php, search.php, view.php helt til man logger inn neste gang.

 

Noen tips til hvordan man kan gjøre dette? Har lurt litt på .htaccess, men er ikke sikker. Hvis man kan gjøre det med php og mysql hadde det vært det beste.

 

For opplysningens skyld: Alle admin-scriptene ligger ien egen mappe.

 

På forhånd takk for hjelpen.

Lenke til kommentar
Videoannonse
Annonse

Å bare bruke sessions, som de gjør i den tutorialen, kan redusere funksjonaliteten endel, ved at brukere blir automatisk utlogget etter så, så lang tid's inaktivitet, si man skriver en lang artikkel, så når man skal sende den inn, er sessionen utløpt, veldig kjedelig. Derfor lønner det seg bruke sessions sammen med cookies på en lur måte.

 

En annen ting med den tutorialen, og mange andre tutorials, er at de ikke kjører noen sjekker på hva brukeren faktisk skriver inn, det bør alltid kjøres regexps på input fra brukere. I hvertfall når denne dataen skal brukes i queries etc.

Lenke til kommentar
...at brukere blir automatisk utlogget etter så, så lang tid's inaktivitet...

Det burde ikke være noe særlig til problem sidene session expire er defalt satt til 180 minutter - eller 3 timer. For de aller fleste scripts burde dette være mer enn nok tid. Skulle det likevel være nødvendig å utvide denne tiden, siden en bruker er på samme side i mer enn 3 timer, kan du enkelt utvide denne tiden med session_cache_expire()

 

Siden det er så mange som ikke har cookies enabled er det ikke lurt å la innlogging være avhengig av dette, men det er en veldig bra funksjon for funksjoner som automatisk innloging!

Lenke til kommentar

Har nå skrevet login.php slik:

 

<?php 

session_start();

$id = $_POST['id'];
$password = $_POST['Passord'];
$server = "localhost";
$user = "stduser";
$passwd = "sensur";
$database = "gsfmedlemmer";

/* Kopler til og velger database */
  $link = mysql_connect("$server", "$user", "$passwd")
      or die("Kan ikke kople til : " . mysql_error());
  $db=mysql_select_db("$database"); //or die("Finner ikke database")

$query = "SELECT * FROM admins WHERE id='$id' and Passwd='".md5($password)."'";
$result= mysql_query($query) or die
("Could not execute query : $query." . mysql_error());

if (mysql_num_rows($result) == 0)
{

echo "<div align=center><b>Oops! Your login is wrong. Please click back and try again.</b></div>";

}
else 
{
$r=mysql_fetch_array($result);
$login_username=$r["id"];
session_register("login_username");
Header("Location: main.php");
}

?>

 

Og main.php slik:

 

<?php

session_start();
if($login_username=="") {
Header("Location: login.html");
}

else {

echo('
<html>
<head>
<title>GSF Administrasjon</title>
</head>
<body>
');

echo('Test');

echo('
</body>
</html>
');

}

?>

 

Og her er feilmeldingen:

 

Notice: Undefined variable: login_username in D:\Programfiler\Apache Group\Apache2\htdocs\Admin\main.php on line 4

 

Warning: Cannot modify header information - headers already sent by (output started at D:\Programfiler\Apache Group\Apache2\htdocs\Admin\main.php:4) in D:\Programfiler\Apache Group\Apache2\htdocs\Admin\main.php on line 5

 

Adressen som står i adressefeltet viser til main.php.

 

Noen ide om hva som kan være feil?

Endret av muffe
Lenke til kommentar

Når du får opp en notice sender serveren en header som sier at det er et html dokument.

Derfor klarer ikke php å endre headeren.

 

Siden det er er en notice i linje 4 kan ikke php i linje 5 endre headeren.

 

Du slipper å bruke session_register - bare bruk $_SESSION['EtEllerAnnet'] = "EtEllerAnnet";

Endre til $_SESSION

Endret av ????????
Lenke til kommentar

Ville vært veldig forsiktig med den der;

 

$query = "SELECT * FROM admins WHERE id='$id' and Passwd='".md5($password)."'";

 

Det er ikke så forferdelig vanskelig å legge inn et carefully crafted passord her som gjør at queryet alltid returnerer en eller flere rekker.

 

Anbefaler at du henter ned passordet og sjekker passordet lokalt i PHP koden.

Lenke til kommentar
Ville vært veldig forsiktig med den der;

 

$query = "SELECT * FROM admins WHERE id='$id' and Passwd='".md5($password)."'";

 

Det er ikke så forferdelig vanskelig å legge inn et carefully crafted passord her som gjør at queryet alltid returnerer en eller flere rekker.

 

Anbefaler at du henter ned passordet og sjekker passordet lokalt i PHP koden.

Hva mener du med det?

Lenke til kommentar

Skjønte heller ikke hva du mente, men bruk heller ei egen fil under navnet db.ph eller f.eks. dbconnect.php, som inneholder mysql_connect koden din, og bruk include( "include/db.php" ); i de filene som skal ha tilkobling til db'en.

 

session_start();

if($login_username=="") {

Header("Location: login.html");

}

 

Ville brukt $_SESSION[login_username] i stedet

Lenke til kommentar
Ville vært veldig forsiktig med den der;

 

$query = "SELECT * FROM admins WHERE id='$id' and Passwd='".md5($password)."'";

 

Det er ikke så forferdelig vanskelig å legge inn et carefully crafted passord her som gjør at queryet alltid returnerer en eller flere rekker.

 

Anbefaler at du henter ned passordet og sjekker passordet lokalt i PHP koden.

Hva mener du med det?

Ingen som har lyst til å forklare det med "carefully crafted" passord da?

:)

Lenke til kommentar

uten at jeg kjenner md5hashing alt for godt, er det kanskje mulig å finne et passord som gir en gyldig sql fortsettelse fra det som står der oppe,

f.eks hvis md5($passord) gir en 32 bits streng som evaluert i mysql tilsvarer følgende: "' or 1" (ie først av slutter strengen med en fnutt (') og deretter slenger på "or 1" som vil gjøre at hele uttrykket evalueres til sant uansett hva resultatet av AND blir.

 

Hvis man derimot gjør dette istedet, burde man være trygg:

$passord = mysql_escape_string($passord);
$query = "SELECT * FROM admins WHERE id='$id' and Passwd=md5('$password')";

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å
×
×
  • Opprett ny...