Jeg er ved at lave et lille cms til en hjemmeside. Derfor er jeg vad at lave et lille login system, til administrationen. Jeg har ikke så stor erfaring med php, så jeg har brug for at få vurderet sikkerheden. Det er måske ikke det jeg prioriterer højest, men jeg er sikker på at der ikke skal så meget til for at det bliver en del mere sikkert.
Spm 1. Efter at jeg har tjekket om der eksisterer en admin med angivet username og password udfører jeg følgende kode:
I main.php (og alle kommende sider) står der følgende linie øverst:
require('validation.php');
Og i validation.php står der:
<?php
if (!isset($_SESSION['adminId'])) { header("Location: index.php"); }
?>
Hvor sikkert er det at gøre det på denne måde? Jeg har testet dette, og det virker. Så det ser ud som om almindelige mennesker bliver lukket ude.
Spm2. Hvordan gør jeg så at den session udløber? Går ud fra at den udløber når clienten lukkes ned, men hvad nu hvis man vil at den skal udløbe efter ½ time? Synes mange systemer er på den måde, men det er måske noget pjat?
Og det andet er sådan set rimelig sikkert sålænge vi snakker om PHP-kodning. Der er flere måder at lave login-systemet på, men din løsning er for mig at se ligeså god som mange andre. Det eneste jeg måske ville påpege var at dit redirect-script vil være pænere ved at bruge header("Location: en_side.php"); - men giver jo sådan set samme resultat igen...
Jo flere variabler der sættes, jo flere ressourcer bruger serveren. I et så lille script vil det næppe være mærkbart, men alligvel en god ting at tænke over...
Okay, så det er cookies man skal bruge. Hvad sker der med dem som har slået dette fra?
God pointe med ressourcer. Var dog klar over at den linie kunne undværes. Synes generellt php giver noget grimt kode (har arbejdet med cfml før), så man bliver ikke så motiveret til at rydde op.
Husk også at køre en mysql_real_escape_string() på både brugernavn og password inden du laver database kaldet. Ellers er der ingen ben i at smutte udenom din login funktion. Og som en ekstra sikkerhed kan du checke at det indtastede brugernavn og password er det samme som det databasen returnerer. Så skulle du være sikret mod SQL injection.
Din fejl: "Warning: Cannot modify header information - headers already sent by..." skyldes, at du får udskrevet kode inden burgeren bliver redirectet. Det ligger enten i samme .php-fil som udskriver noget til skærmen før den kører selve login-scriptet, der er et <mellemrum> før <?PHP eller lign. Det kan løses med at bruge din egen løsning, eller du kan kigge på ob_start(); - men lige meget hvad, så er den pæneste løsning at få header() til at virke, ved at lave en separat fil til scriptet, eller i hvert fald sikre at der ikke bliver udskrevet noget til skærmen inden.
Dog har det så den ulempe, at hvis en bruger sender et link med session_id'et, vil andre kunne "gøre brug" af session'en. Det kan man så nogenlunde fixe ved at registrere ip'en og lave tjek på den ved hver request
Jahh, havde ikke brugt det selv, fandt kun ud af at der blev lavet en ny session-fil! Men det lader til at browseren "gememr" session, og putter satte variabler ind i den nye fil. (og så er det sekunder, og ikke minutter!)
Jeg er ikke helt med, sukod?! Kunne du ikke få ovenstående script til at fungere? Når du siger registrere tidspunkt, mener du så at gemme dette i sessionen? Vil du så opdatere dette for hvert sidekald?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.