2006-11-15, 15:41
  #1
Medlem
phatzs avatar
Halloj!

Har en inloggningsfunktion som visserligen fungerar men jag har ingen aning om hur säker den är. Såhär ser det ut:

Kod:
<?php

session_start();
$username = $_POST["username"];
$password = md5($_POST["password"]);
if ($username == "exempel" AND $password == "exempelpass") {
$_SESSION['permission'] = 1;
}

?>

Och sedan står detta på varje sida:

Kod:
<?php

session_start();
if ($_SESSION['permission']) {

?>

bla bla bla

<?php }else{ ?>

Du har inte tillåtelse att nå denna sida.

<?php } ?>

Och slutligen i logout.php:

Kod:
<?php

session_start();
session_unset();
session_destroy();
$_SESSION = array();

?>

Duger det ur en säkerhetssynvinkel? Det är inte en speciellt stor eller jättepopulär sida men den bör ju inte vara dåligt skyddad bara för det. Den behöver inte heller ha något megaskydd men skulle vara trevligt om den inte är bland de sämsta iaf

phatz
Citera
2006-11-15, 16:12
  #2
Medlem
oGGos avatar
Jag är inte phpare men ser ändå att sidan använder sessions för inloggningen. Sessions ligger ju på serversidan och inte på klienten varför det r bland de säkraste alternativen, du kan således vara lugn. Vad jag dock skulle göra är typ..
Kod:
md5(md5($_POST["password"]))
alt. lägga till någon skum sträng i förfarandet typ:
Kod:
md5($_POST["password"] + "hh829002mcmq9imcaic002109")

/oggo
Citera
2006-11-15, 16:44
  #3
Medlem
phatzs avatar
Citat:
Ursprungligen postat av oGGo
Jag är inte phpare men ser ändå att sidan använder sessions för inloggningen. Sessions ligger ju på serversidan och inte på klienten varför det r bland de säkraste alternativen, du kan således vara lugn. Vad jag dock skulle göra är typ..
Kod:
md5(md5($_POST["password"]))
alt. lägga till någon skum sträng i förfarandet typ:
Kod:
md5($_POST["password"] + "hh829002mcmq9imcaic002109")

/oggo

Tack för svaret och tipsen, oGGo!
Citera
2006-11-16, 01:11
  #4
Medlem
herons avatar
Kanske byta namn på $_SESSION['permission'] och använda något skummt värde istället för 1 eller true.

Edit: Lägger till lite.

Den här koden känns lite onödig

Kod:
<?php

session_start();
if ($_SESSION['permission']) {

?>

bla bla bla

<?php }else{ ?>

Du har inte tillåtelse att nå denna sida.

<?php } ?>

Den här fungerar likadant

Kod:
<?php

session_start();
if (!$_SESSION['permission']) {

 echo 'Du har inte tillåtelse att nå denna sida.';
 
?>

Hej och välkommen.

Kan vara bra att tänka på senare om det blir en del if-satser.
Citera
2006-11-17, 15:39
  #5
Medlem
phatzs avatar
Citat:
Ursprungligen postat av heron
Kanske byta namn på $_SESSION['permission'] och använda något skummt värde istället för 1 eller true.

Edit: Lägger till lite.

Den här koden känns lite onödig

Kod:
<?php

session_start();
if ($_SESSION['permission']) {

?>

bla bla bla

<?php }else{ ?>

Du har inte tillåtelse att nå denna sida.

<?php } ?>

Den här fungerar likadant

Kod:
<?php

session_start();
if (!$_SESSION['permission']) {

 echo 'Du har inte tillåtelse att nå denna sida.';
 
?>

Hej och välkommen.

Kan vara bra att tänka på senare om det blir en del if-satser.

Ja, ser lite smidigare ut Och att ändra namn samt värde verkar vara en bra säkerhetsåtgärd. Stort tack!
Citera
2006-11-18, 15:32
  #6
Moderator
rancors avatar
Eftersom tekniken bygger på sessionskakor så kan man med ganska enkla medel stjäla sessionskakan via t.ex. xss eller att sniffa trafiken mellan server och klient.

Alltså borde du se till att man går in på sidan, skickas vidare till en ny site som endast godkänner ssl, om man inte byter site bör man förstöra den gamla sessionen och skapa en ny efter att man är säkrad med ssl.

Nu kan man inte sniffa kakan lika lätt.

Vidare inne i siten måste du skydda dig mot t.ex. xss och sql injections. Det finns hur mycket information som helst om detta på nätet.
Citera
2006-11-18, 17:47
  #7
Medlem
phatzs avatar
Känns lite overkill för just den här sidan men är ju bra träning för den dagen det behövs, får googla lite på det. Tack, rancor!
Citera
2006-11-20, 10:12
  #8
Medlem
Quienas avatar
Citat:
Ursprungligen postat av Quiena
Inte för att jag är någon specialist på att knäcka inloggningar men... hur ska man lyckas köra en SQL injection när han inte ens hämtar inloggningsinformationen från en databas el. liknande?

Följande känns ganska knepig att köra en SQLinjection på:
Citat:
if ($username == "exempel" AND $password == "exempelpass")
Ett enda problem jag kan se me denhär är "register_globals", vilket betyder om man gör såhär:
login.php?username=moo&password=foo
Vilket då automatiskt sätter
$username till 'moo' och
$password till 'foo'.
Däremot sätter han värdena på båda två innan han jämför, så det bör inte heller spela någon speciell roll.

... bara en undran
Ah, såg först nu att du sa "väl inne i siten", vilket jag antar inte syftar på hans nuvarande inloggningsmetod. Isåfall, ignorera denne posten.
Citera
2006-11-20, 13:47
  #9
Moderator
rancors avatar
Citat:
Ursprungligen postat av Quiena
Ah, såg först nu att du sa "väl inne i siten", vilket jag antar inte syftar på hans nuvarande inloggningsmetod. Isåfall, ignorera denne posten.
=)

Även om teorin och praktiken oftast skiljer så är teorin ändå följande

Om koden ser ut såhär
Kod:
if ($username == "exempel" AND $password == "exempelpass"

och inmatning av username och password är enl. följande:
username = "1==1 OR nisse"
password = "1==1 OR nissepassword"

så skulle i teorin strängen exekveras enl. följande modell
Kod:
if (1==OR nisse == "exempel" AND 1==OR nissepassword == "exempelpass"
Nu kommer inte detta att fungera för jag har för mig att en variabel i PHP inte kan innehålla körbar kod och jag är inte heller säker på att if-satsen kommer fungera för här är jag ute på hal is för jag har inte kodat PHP. Jag kodar mest ASP och VBScript för webben och när det gäller att injicera kod så skiljer teorin inte så mycket.

Men du förstår säkert vad jag är ute efter.
Citera
2006-11-20, 17:29
  #10
Medlem
Quienas avatar
Citat:
för jag har för mig att en variabel i PHP inte kan innehålla körbar kod
Det var det jag tänkte på, och därför antydde att den var relativt säker redan.

Nåja, skadar aldrig att vara försiktig. =)
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in