Avatar billede madiedk Nybegynder
05. februar 2007 - 20:38 Der er 20 kommentarer og
1 løsning

sikkerhed i php

jeg skal til at lave lidt sikkerhed på min hjemmeside. under et af punkterne i menuen skal der være kode på. de andre punkter skal alle kunne se. jeg vil gerne lave det i php med mysql og ikke htaccess. har læst nogle guides på nettet men vil gerne have lidt mere specifikke svar derfor skriver jeg herinde.

1. hvis jeg har en fil der hedder test.php som jeg gerne vil have kun folk med kodeord skal kunne se, hvordan laver jeg det så sådan at de ikke bare kan skrive http://www.xxx.dk/test.php og så kan komme ind på den. det er vel i filen php jeg skal ændre noget. men hvad nu hvis jeg har en hjemmeside med 300 sider og alle sider skal være hemmelige skal jeg så ændre noget i alle siderne?

2. kan man lave så ligemeget hvilke side folk er på så står der kun http://www.xxx.dk oppe i addresse linien
Avatar billede esben85 Nybegynder
05. februar 2007 - 20:44 #1
Du behøver jo ikke gøre dine filer offentligt tilgængelig for at includere dem på en i en anden php-fil.

Du kan gemme en session-variabel ved login, som du så tjekker for i test.php.
Avatar billede simplus Nybegynder
05. februar 2007 - 20:50 #2
1. Ja du bliver nød til at ændre i hver fil hvis du vil beskytte et helt site. Hvis du beskytter en side, så skal du gøre det i selve filen, det betyder samtidigt at hvis man skriver www.xxx.dk/test.php så vil kun de udvalgte have adgang.

2. Det kan gøres ved hjælp af iframes: http://www.html.dk/dokumentation/html4/tags/iframe/

Man kan dog lave en bedre løsning der gør at du ikke behøver at ændre i alle filerne hvis du vil beskytte hele sitet. Du laver 1 fil med tjek på om man har adgang og derefter includer du den i hver fil. Så senere hen ændrer du kun i den ene fil, hvilket gør alting lidt nemmere. Det hele kan dog yderligere blive nemmere hvis du i forvejen har en MySQL.php fil som indeholder en connection eller lign. som bliver includet i hver fil. Så kan du bare nederst i den fil indsætte en if der tjekker om man har adgang og vupti ;-)

Kunne du også godt tænke dig at høre noget om hvordan du beskytter en side, eller har du styr på det? :-)
Avatar billede jakobdo Ekspert
05. februar 2007 - 21:07 #3
1: Hvis vi snakker 300 filer, så burde du måske overveje htaccess. Se her: http://fumle.dk/htaccess/
Avatar billede amews_aj Nybegynder
05. februar 2007 - 21:14 #4
hvis du buger include() til dine beskyttede filer, så skal du komme alle dem ind i en mappe (evt. flere undermapper), hvorefter du laver en .htaccess fil hvor der står

Order allow,deny
Allow from none
Deny from all


Det gør at man ikke kan gå direkte til filerne, men php kan godt få fat i dem via include ;)
Avatar billede madiedk Nybegynder
05. februar 2007 - 21:35 #5
tak for svarene prøver lige at rode lidt med det

jeg vil meget gerne høre om hvordan man beskytter en side, simplus, tak
Avatar billede jakobdo Ekspert
05. februar 2007 - 21:45 #6
Ganske nemt kan du lave beskyttelse af en side på følgende måde:
<?php
session_start();
if($_SESSION['login'] !== true)
{
header('Location: http://www.exp.dk');
exit();
}
//Her kommer din side så....
echo 'Velkommen, du er logget ind';
?>

Og så skal du lave en login formular:

<?php
session_start();
if(isset($_POST['login']))
{
  if($_POST['user'] == 'user' && $_POST['pass'] == 'pass')
    $_SESSION['login'] = true;
}
?>
<form action="" method="post">
Username: <input type="text"  name="user"><br />
Password: <input type="password" name="pass"><br />
<input type="submit" value="Login" name="login">
</form>

Prøv at gem øverste kode som: secret.php
Åben siden inden du har gjort noget.
Prøv så at gem formen som kode: login.php
Åben siden, skrive user og pass og tryk login!
Åben så siden secret.php igen!
Avatar billede simplus Nybegynder
05. februar 2007 - 21:49 #7
Okay, jeg tager det i korte præcise træk.

Du laver eksempelvis en database som indeholder 2 felter: brugernavn, kodeord. Lad os antage at brugernavnet er Jens og kodeordet er exp123. Kodeordet er ekstrbeskyttet med md5() som er et hash til passwords. Nu skal vi så have tjekket om det som brugerne skriver i input felterne matcher sammen med det som står i databasen. Hvis det gør det så sætter vi en session, hvis ikke så sender vi dem til en fejl-side. Hvis du ikke ved hvad sessions er kan jeg kort sige at det er som en slags variabel der kan sendes problemfrit til andre undersider. Det kan man ikke uden videre med almindelige variabler.

Nu vil jeg vise lidt kode til at illustrere min forklaring:

<?php
session_start(); //session motoren startes

//vi gemmer det brugeren skrev i nye variabler som vi tilføjer lidt sikkerhed til
$user = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);

    //vi søger efter brugeren i databasen
    $query = mysql_query("SELECT * FROM TabelNavn WHERE brugernavn = '$user' AND kodeord = '$pass'") or die(mysql_error());
    //vi tæller hvor mange den resultater den fandt
    $taelres = mysql_num_rows($query);

    if ($taelres > 0) {
        //brugeren findes og vi sætter en session
        $_SESSION['logged_in'] = "yes";
    }else{
        //brugeren findes ikke og vi sender brugeren til en fejl-side
        header("Location: fejl.php");
    }
?>

Nu kan du så på en ny side tjekke om $_SESSION['logged_in'] findes og hvis den gør det har man adgang.
Avatar billede madiedk Nybegynder
06. februar 2007 - 14:04 #8
okay mange tak.

er der ikke andre måder at besvarer mit andet spørsmål på en med iframe, eller det er måske den bedst måde?

hvad hvis jeg har 5 sider, skal jeg så lave en login.php i alle 5 sider eller kan jeg samle det i en? jeg spørger fordi at header('Location: http://www.exp.dk'); står der jo den side som output bliver sendt til! håber i forstår hvad jeg mener?
Avatar billede simplus Nybegynder
06. februar 2007 - 14:17 #9
Altså du skal lave et check script som checker om folk har adgang til en tilfældelig side. Den kan du include i alle filer og så behøver du ikke gøre mere.

Hvis det ikke var helt det du mente, er du mere end velkommen til at uddybe dig :-)
Avatar billede hewa Nybegynder
06. februar 2007 - 15:54 #10
simplus, kunne man i stedet springe skridte over med at lave nye variabler ved at lave en forspørgsel der hedder:
$query = mysql_query("SELECT * FROM TabelNavn WHERE brugernavn = '".mysql_real_escape_string($_POST['username'])."' AND kodeord = '".mysql_real_escape_string($_POST['password'])."'") or die(mysql_error());
Eller hænger det slet ikke sammen?
Avatar billede madiedk Nybegynder
06. februar 2007 - 16:30 #11
simplus: jo det var absolut en løsning jeg kunne bruge, jeg kunne vel ikke få dig til at lave det script:-) eller komme med et udkast.

jeg er ikke så skarp i php endnu. er ved at forstå tankegangen, men mangler stadig lidt.
Avatar billede madiedk Nybegynder
06. februar 2007 - 16:49 #12
mit problem er at kan jeg bare på alle sider lave en if $_SESSION['logged_in'] eller skal jeg ikke på den side skrive hvilke sider der kan se min session? eller er det nok bare at lave en session_start(); på de sider skal jeg se om $_SESSION['logged_in'] er true
Avatar billede jakobdo Ekspert
06. februar 2007 - 17:10 #13
Du skal nemlig lave følgende i toppen:

<?php
session_start();
if($_SESSION['logged_in'] !== true)
{
header('Location: http://www.exp.dk');
exit();
}
//her kommer din sides indhold...
?>
Avatar billede amews_aj Nybegynder
06. februar 2007 - 17:10 #14
Alle dine sider har adgang til dine sessions, så længde du har brugt session_start();
Avatar billede amews_aj Nybegynder
06. februar 2007 - 17:11 #15
der skulle selvfølgelig stå "så længe" :)
Avatar billede madiedk Nybegynder
05. marts 2007 - 15:02 #16
hvis der svar er der point
Avatar billede amews_aj Nybegynder
05. marts 2007 - 15:31 #17
Hvis du har gjort brug af min metode, så får du lige et svar her,
jeg har dog indtrykket af at du brugte de andres metode.

Kort sagt, hvis mine svar ikke har været til din hjælp, så giv de andre point.
Avatar billede simplus Nybegynder
05. marts 2007 - 15:35 #18
Jeg ønsker ikke point.

Sorry jeg ikke fik svaret på de to spm der kom 15:54:51 og 16:30:10 !
Avatar billede jakobdo Ekspert
05. marts 2007 - 15:37 #19
Hvis jeg har hjulpet, får du også et svar her!
Avatar billede madiedk Nybegynder
05. marts 2007 - 15:38 #20
tak for hjælpen, og tiden. jakobdo for pointene.
Avatar billede jakobdo Ekspert
05. marts 2007 - 15:48 #21
Takker for point.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester