/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sikkerhed
Fra : Jeppe Vesterbæk


Dato : 24-07-02 18:16

Lige et spørgsmål om sikkerhed.

I en mySQL database har jeg info om brugere (incl password ukrypteret)
lagret.

Når en bruger skal logge ind, foregår det via en form, hvor jeg kører
addslashes() på indholdet fra de 2 inputbokse (m. henholdsvis brugernavn og
password).

Findes der en post m. brugernavn + password, sætter jeg et par sessions,
f.eks. $_SESSION['adgang'] som angiver brugerens adgangsniveau.

På sider jeg så gerne vil beskytte bruger jeg:
if (!isset($_SESSION['bruger'])) redir();
//redir() er blot en hjemmelavet funktion jeg bruger til at redirecte.

Er dette sikkert / hvor sikkert er dette? ... og hvor er der eventuelle
huller?

Undskyld alle spørgsmålene
/Jeppe



 
 
Jakob Møbjerg Nielse~ (24-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 24-07-02 18:23

Jeppe Vesterbæk wrote:
> Er dette sikkert / hvor sikkert er dette? ... og hvor er der
> eventuelle huller?


I det kode du har vedsendt kan jeg ikke se at der er noget galt.
Sessionvariable kan *kun* ændres serverside, og er altså en ganske
sikker løsning når det gælder adgangsniveauer.

Men hvorfor bruger du
if (!isset($_SESSION['bruger'])) redir();
i stedet for
if ($_SESSION['adgang'] < $et-eller-andet-tal) redir();
når du nu netop arbejder med flere niveauer?

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man



Jeppe Vesterbæk (24-07-2002)
Kommentar
Fra : Jeppe Vesterbæk


Dato : 24-07-02 18:32

> Men hvorfor bruger du
> if (!isset($_SESSION['bruger'])) redir();
> i stedet for
> if ($_SESSION['adgang'] < $et-eller-andet-tal) redir();
> når du nu netop arbejder med flere niveauer?

jeg bruger også if ($_SESSION['adgang'] < $et-eller-andet-tal, men skal jeg
ikke først tjecke om variablen er "sat", før jeg kan bruge den i udtryk?
Som jeg gør det nu:
if (isset($_SESSION['adgang'])) if ($_SESSION['adgang'] <
$et-eller-andet-tal) redir();

>Lige en ting til... nu har du vel husket en exit; eller die; i din
>redirect funktion?
erm, jeg redirecter bare via en header (skriver først ud på skærmen til
sidst på alle mine sider)

function redir($url=""){
if (!$url) $url = "http://jeppe";
header("Location: $url");
}

Jeg jeg includere en die() for at være sikker?

/Jeppe




Jakob Møbjerg Nielse~ (24-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 24-07-02 19:06

Jeppe Vesterbæk wrote:
> function redir($url=""){
> if (!$url) $url = "http://jeppe";
> header("Location: $url");
> }

Du kan lave "standardargumenter" i funktioner:

function redir($url="http://jeppe") {
header("Location: $url");
exit;
}

> Jeg jeg includere en die() for at være sikker?

Ja, ellers bliver resten af scriptet stadigvæk udført.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man



Jakob Møbjerg Nielse~ (24-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 24-07-02 18:25

Jeppe Vesterbæk wrote:
> //redir() er blot en hjemmelavet funktion jeg bruger til at redirecte.


Lige en ting til... nu har du vel husket en exit; eller die; i din
redirect funktion?
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man



-Martin- (24-07-2002)
Kommentar
Fra : -Martin-


Dato : 24-07-02 22:04

On Wed, 24 Jul 2002 19:16:11 +0200, "Jeppe Vesterbæk"
<jhv38731[REMOVE-XXXXXXXXXX]@but.auc.dk> wrote:

>Lige et spørgsmål om sikkerhed.
>
>I en mySQL database har jeg info om brugere (incl password ukrypteret)
>lagret.

Jeg plejer altid at MD5'e passwordet ... Så er det mere sikkert efter
min mening ... og hvis så brugeren ikke kan huske sit gamle så laver
man et nyt til ham også sender det pr mail eller noget lign

>
>Når en bruger skal logge ind, foregår det via en form, hvor jeg kører
>addslashes() på indholdet fra de 2 inputbokse (m. henholdsvis brugernavn og
>password).

Her plejer jeg at lave alle kodeord og navne til småt med strtolower
fordi at hvis man fx logger ind med ole men der i virkeligheden står
OLE i databasen, ja så går det galt

fx

$navn = "OLE";
$password = "OLEBOLE";

$insert = "
INSERT INTO
tabel
VALUES
(
'".addslashes(strtolower($navn))."',
'".addslashes(strtolower(md5($password)))."'
)
";

$sql = mysql_query($insert);

Sådan plejer jeg at gøre, om det giver mere sikkerhed ved jeg ikk

MEN man kan ihvertfald ikk snyde med passwordsne (og du kan ikke se
andres password)

og ved et tjek login ... så er det jo også simpelt

$check = "
SELECT
*
FROM
tabel
WHERE
password_række = '".addslashes(strtolower($navn))."'
AND
loginnavn_række = '".addslashes(strtolower(md5($password)))."'
";

$sql = mysql_query($check);

>Findes der en post m. brugernavn + password, sætter jeg et par sessions,
>f.eks. $_SESSION['adgang'] som angiver brugerens adgangsniveau.
>
>På sider jeg så gerne vil beskytte bruger jeg:
>if (!isset($_SESSION['bruger'])) redir();
>//redir() er blot en hjemmelavet funktion jeg bruger til at redirecte.

Jeg ville nok lave en funktion som tjekkede om brugernavnet virkelig
findes i databasen, ved ikk hvorfor, men såen er jeg bare

>Undskyld alle spørgsmålene

Det gør det kun sjovere

>/Jeppe
>


Peter Brodersen (24-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 24-07-02 22:37

On Wed, 24 Jul 2002 23:04:08 +0200, -Martin-
<martin_aarhof[DONT]@SPAMhotmail.com> wrote:

>Her plejer jeg at lave alle kodeord og navne til småt med strtolower
>fordi at hvis man fx logger ind med ole men der i virkeligheden står
>OLE i databasen, ja så går det galt

Eh, hvis du bruger en MySQL-database og lader brugerfeltet være et
tekstfelt (tinytext, text, varchar, etc), vil det ikke være
case-sensitive i første omgang:

mysql> create table pw (navn tinytext);

mysql> insert into pw values ("Peter");

mysql> select * from pw where navn = "peTEr";
+-------+
| navn |
+-------+
| Peter |
+-------+

Vil man lade det være sensitive, kan man fx bruge et BLOB-felt.
Alternativt kan man bruge BINARY i sin aktuelle select, hvis man
ønsker dette:

mysql> select * from pw where BINARY navn = "peTEr";
Empty set (0.02 sec)

--
- Peter Brodersen

-Martin- (25-07-2002)
Kommentar
Fra : -Martin-


Dato : 25-07-02 11:07

On Wed, 24 Jul 2002 23:36:32 +0200, Peter Brodersen <usenet@ter.dk>
wrote:

>On Wed, 24 Jul 2002 23:04:08 +0200, -Martin-
><martin_aarhof[DONT]@SPAMhotmail.com> wrote:
>
>>Her plejer jeg at lave alle kodeord og navne til småt med strtolower
>>fordi at hvis man fx logger ind med ole men der i virkeligheden står
>>OLE i databasen, ja så går det galt
>
>Eh, hvis du bruger en MySQL-database og lader brugerfeltet være et
>tekstfelt (tinytext, text, varchar, etc), vil det ikke være
>case-sensitive i første omgang:

Jeg mener bare at kunne huske, at der engang eller to havde jeg
problemer med det nemlig (måske en tidlig udgave af PHP eller MySQL,
jeg ved det ikke)

Måske er det kun med Æ, Ø og Å (og de andre specieltegn) som der giver
problemer med store/små bogstaver

Peter Brodersen (25-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 25-07-02 11:27

On Thu, 25 Jul 2002 12:06:47 +0200, -Martin-
<martin_aarhof[DONT]@SPAMhotmail.com> wrote:

>Måske er det kun med Æ, Ø og Å (og de andre specieltegn) som der giver
>problemer med store/små bogstaver

Det afhænger vist af ens sprogopsætning.

mysql> insert into pw values ("Æble");

mysql> select * from pw where navn = "æble";
+------+
| navn |
+------+
| Æble |
+------+

--
- Peter Brodersen

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste