FOK!forum / Digital Corner / [PHP] Loginscript voor 1 gebruiker zonder database!
SunBoomzondag 8 februari 2009 @ 16:04
Ik ben op zoek naar een loginscript. Heb al op internet lopen zoeken, maar heb geen enkele (naar mijn smaak) kunnen vinden. Daarom vraag ik jullie om hulp!
Ik heb een site gemaakt en ik wil maar 1 deel (een paar html pagina's) beveiligen.
Zo wil ik het hebben:
In het menu klik je dus op 1 van die pagina's en dan krijg je een pagina waarbij je moet inloggen. Als je bent ingelogd keer je vervolgens "terug" naar de pagina die je te zien hoort te krijgen (dus de echte pagina die je wilde zien toen je in het menu op die pagina klikte).
Op dit moment kun je alle pagina's bekijken (dus niet steeds weer inloggen voor de verschillende beveiligde pagina's).

Loguit functie hoeft er ook niet perse op te zitten.

En het hoeft maar voor 1 gebruiker te zijn. Dus en een registratie/wachtwoord vergeten en dergelijke functies hoeven er dus niet op te zitten.

Niet met databases aub! En natuurlijk in PHP

Dus 2 php bestandjes 1 om in te loggen en 1 om de gegevens te checken (en een 3e als er een uitlogfunctie bijzit).
In de html bestandjes een "include" optie ofzo dat je eerst moet inloggen voordat je de pagina kan zien.

En nee ik ben niet lui, maar mijn PHP kennis is niet erg groot.

BVD
Eelcotje84zondag 8 februari 2009 @ 16:07
Je bent wel lui want zo moeilijk is dat niet
qu63zondag 8 februari 2009 @ 16:12
.htacces geen optie?
SunBoomzondag 8 februari 2009 @ 16:22
quote:
Op zondag 8 februari 2009 16:12 schreef qu63 het volgende:
.htacces geen optie?
Vertel eens...heb hier ook weinig ervaring mee
cablegunmasterzondag 8 februari 2009 @ 16:27
het is makkelijk maar dan staat je wachtwoord en je login in een bestand opgeslagen.
ipv in de sql zelf.
dingdangzondag 8 februari 2009 @ 16:28
quote:
Op zondag 8 februari 2009 16:27 schreef cablegunmaster het volgende:
het is makkelijk maar dan staat je wachtwoord en je login in een bestand opgeslagen.
ipv in de sql zelf.
Hij wil geen database gebruiken, dus dat probleem heb je toch al.
htaccess is een mooie en simpele oplossing!
HuHuzondag 8 februari 2009 @ 16:34
1
2
3
4
5
6
7
8
<?php
if ($_POST['wachtwoord'] == 'geheim') {
  
// succesvol ingelogd
} else {
  echo 
'Oh noes... het wachtwoord is niet goed ;-(.';
  exit;
}
?>
cablegunmasterzondag 8 februari 2009 @ 16:41
quote:
Op zondag 8 februari 2009 16:34 schreef HuHu het volgende:

[ code verwijderd ]


dat covert het ongeveer wel
cablegunmasterzondag 8 februari 2009 @ 16:45
Bestand 1 kun je zelf wel hopelijk
1
2
3
4
5
6
7
8
9
10
<html>
<head><title>Inloggen</title></head>
<body>
<form method='post' action="verificatie.php">
<input type='text' name='gebruiker' /><br />
<input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login' />
</form>
</body>
</html>



bestand 2 verificeren gecheckt :
als je nog problemen hebt pm.

verificatie.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start
();
if (
$_POST['wachtwoord'] == 'geheim') {
  
// succesvol ingelogd
 
$_SESSION['auth']=true;
 
$_SESSION['timeout']= time()+ 30//30minuten voor hij auto uitlogt kan je zelf aanpassen
 
$_SESSION['gebruiker']= $_POST['gebruiker'];
header("location:ingelogd.php"true303);
exit();
}else{
header("location: index.php"true303);
  exit();
}
?>


bestand 3:
logout.php
1
2
3
4
5
6
<?php
session_start
();
session_unset();
session_destroy();
header("location: index.html"true 303);
?>


elk ander beveiligd bestand X:
boven elk bestand zet je dit neer.
1
2
3
4
5
6
7
<?php
session_start
();
if(!Isset(
$_SESSION['gebruiker']))
{
die( 
"Niet ingelogd! <a href=\"index.php\">klik hier</a> om naar de goeie pagina te gaan");

?>


zo kun je dus 2 voorwaarde in zetten :

in index.php kun je bvb
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 
session_start();
if(IsSet($_SESSION['gebruiker']))
{
echo "Dit is beveiligde ruimte! maar staat op dezelfde pagina  ";
echo "welkom".$SESSION['gebruiker']."dat je hier mag neerzetten wat je wil   ";
?>Maar je kan er ook in html in typen   
<?php } 
if(!isset($_SESSION['gebruiker']))
{
echo "je bent niet ingelogd! maar je ziet dit wel staan";
}
?>


UPDATE sha1:
wachtwoord voor sha1 (eenmalig of hoe vaak je het wachtwoord ook wijzigt)
vul in mijnwachtwoord wat je ook maar wil.
1
2
3
4
5
<?php
$wachtwoord1 
"Mijnwachtwoord"
$wachtwoord Sha1($wachtwoord1);
echo 
$wachtwoord;
?>

dan krijg je 40 tekens eruit
bestand 2 verificeren met SHA1:
stop de 40 tekens zonder spatie op de plaats geheim met quotes.

verificatie.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start
();
$wachtwoord sha1($_POST['wachtwoord']);
if (
$wachtwoord == 'geheim') {
  
// succesvol ingelogd
 
$_SESSION['auth']=true;
 
$_SESSION['timeout']= time()+ 30//30minuten voor hij auto uitlogt kan je zelf aanpassen
 
$_SESSION['gebruiker']= $_POST['gebruiker'];
header("location:ingelogd.php"true303);
exit();
}else{
header("location: index.php"true303);
  exit();
}
?>


[ Bericht 48% gewijzigd door cablegunmaster op 09-02-2009 17:22:28 ]
SunBoomzondag 8 februari 2009 @ 16:45
quote:
Op zondag 8 februari 2009 16:34 schreef HuHu het volgende:

[ code verwijderd ]
En dit moet ik bovenaan iedere html pagina zetten?
cablegunmasterzondag 8 februari 2009 @ 16:46
quote:
Op zondag 8 februari 2009 16:45 schreef SunBoom het volgende:

[..]

En dit moet ik bovenaan iedere html pagina zetten?
nee dit werkt op 1 pagina
dus dan heb je een inlog met 1 pagina die beschermt is
Sar2007zondag 8 februari 2009 @ 16:48
login.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();

if($_SERVER['REQUEST_METHOD'] == "POST"){

   $user = "GEBRUIKERSNAAM";
   $pass = "WACHTWOORD";

   if($_POST['pass'] == $pass AND $_POST['user'] == $user){
      $_SESSION['user'] = $user;
   }
}else{
   echo "<form method='post'>
      <input type='text' name='user' /><br />
      <input type='password' name='pass' /><br />
      <input type='submit' value='Login' />
      </form>";
}
?>


Dan zet je boven elke beveiligde pagina:
1<?php if(!IsSet($_SESSION['user']){ die("Niet ingelogd!"); ) ?>


loguit.php
1<?php session_destroy(); ?>


Die is natuurlijk niet heel veilig, maar werkt wel!
SunBoomzondag 8 februari 2009 @ 16:49
Oké, bedankt allemaal ik ga het even uitproberen.
BereNDDzondag 8 februari 2009 @ 16:51
quote:
Op zondag 8 februari 2009 16:45 schreef SunBoom het volgende:

[..]

En dit moet ik bovenaan iedere html pagina zetten?
hahaha
cablegunmasterzondag 8 februari 2009 @ 17:03
quote:
Op zondag 8 februari 2009 16:49 schreef SunBoom het volgende:
Oké, bedankt allemaal ik ga het even uitproberen.
pm me als je problemen hebt
poepeneesjezondag 8 februari 2009 @ 17:03
.htaccess oplossing: http://tools.pcextreme.nl/index.php?page=secure_map
SunBoomzondag 8 februari 2009 @ 17:39
Beide scripts (van sar2007 en cablegunmaster) doen het niet.

Die van cablegunmaster geeft een parse error in verificatie.php.
En die van sar2007 geeft een error in het stukje dat je op iedere pagina moet plakken (op line 1 dus).
cablegunmasterzondag 8 februari 2009 @ 17:54
quote:
Op zondag 8 februari 2009 17:39 schreef SunBoom het volgende:
Beide scripts (van sar2007 en cablegunmaster) doen het niet.

Die van cablegunmaster geeft een parse error in verificatie.php.
En die van sar2007 geeft een error in het stukje dat je op iedere pagina moet plakken (op line 1 dus).
heb de mijne al aangepast

recheck ?

maar wat wil je er eigenlijk opzetten?
Drenthezondag 8 februari 2009 @ 20:28
Tip:

Sha1 al je velden al voordat je ze opgestuurd hebt (en dit dus dmv javascript). Misschien overbodig voor wat jij wil doen, maar toch een vereiste voor elke zelfrespecterend script.
cablegunmasterzondag 8 februari 2009 @ 21:03
quote:
Op zondag 8 februari 2009 20:28 schreef Drenthe het volgende:
Tip:

Sha1 al je velden al voordat je ze opgestuurd hebt (en dit dus dmv javascript). Misschien overbodig voor wat jij wil doen, maar toch een vereiste voor elke zelfrespecterend script.
zal ik het even toepassen ?
HuHuzondag 8 februari 2009 @ 21:04
quote:
Op zondag 8 februari 2009 20:28 schreef Drenthe het volgende:
Tip:

Sha1 al je velden al voordat je ze opgestuurd hebt (en dit dus dmv javascript). Misschien overbodig voor wat jij wil doen, maar toch een vereiste voor elke zelfrespecterend script.
Wat is het verschil tussen je wachtwoord naar een site sturen, of de SHA1 hash van je wachtwoord naar een site sturen? Ik zie niet in waarom elk "zelfrespecterend" script dat zou moeten doen en al helemaal niet waarom dat vereist zou zijn?
cablegunmasterzondag 8 februari 2009 @ 21:09
quote:
Op zondag 8 februari 2009 21:04 schreef HuHu het volgende:

[..]

Wat is het verschil tussen je wachtwoord naar een site sturen, of de SHA1 hash van je wachtwoord naar een site sturen? Ik zie niet in waarom elk "zelfrespecterend" script dat zou moeten doen en al helemaal niet waarom dat vereist zou zijn?
ik ook niet maar het blijft grapsig stukje beveiliging dat eigenlijk nergens op slaat ^^
Swetseneggerzondag 8 februari 2009 @ 21:10
quote:
Op zondag 8 februari 2009 21:04 schreef HuHu het volgende:

[..]

Wat is het verschil tussen je wachtwoord naar een site sturen, of de SHA1 hash van je wachtwoord naar een site sturen? Ik zie niet in waarom elk "zelfrespecterend" script dat zou moeten doen en al helemaal niet waarom dat vereist zou zijn?
Het gaat niet om het versturen over internet, maar als ooit je db eens gehacked zou worden. Dan staan daar in ieder geval geen plain text passwords in.
HuHuzondag 8 februari 2009 @ 21:19
quote:
Op zondag 8 februari 2009 21:10 schreef Swetsenegger het volgende:

[..]

Het gaat niet om het versturen over internet, maar als ooit je db eens gehacked zou worden. Dan staan daar in ieder geval geen plain text passwords in.
Server-side hashen is inderdaad wel een vereiste. Maar aangezien Drenthe het heeft over JavaScript voor het opsturen, ga ik er toch echt vanuit dat 'ie client-side hashen bedoeld. Dat heeft geen enkele toegevoegde waarde ten opzicht van server-side hashen en is ook nog eens vrij ongebruikelijk en niet aan te raden.
Swetseneggerzondag 8 februari 2009 @ 21:24
quote:
Op zondag 8 februari 2009 21:19 schreef HuHu het volgende:

[..]

Server-side hashen is inderdaad wel een vereiste. Maar aangezien Drenthe het heeft over JavaScript voor het opsturen, ga ik er toch echt vanuit dat 'ie client-side hashen bedoeld. Dat heeft geen enkele toegevoegde waarde ten opzicht van server-side hashen en is ook nog eens vrij ongebruikelijk en niet aan te raden.
Als ik clientside ga versturen naar een server, zal ik toch clientside moeten hashen om te matchen met de db. Maar ik ben met je eens dat je beter gewoon kan POSTEN en serverside de boel kan oplossen.
cablegunmasterzondag 8 februari 2009 @ 21:27
gaat erom dat hij weet dat het bestaat
SunBoomzondag 8 februari 2009 @ 22:27
Morgen test ik de aangepaste scriptjes even.

Bedankt voor alle reacties.

En nog even voor de duidelijkheid:

Ik ben niet opzoek naar een script die met databases werkt. MD5 hashes is allemaal leuk enzo, maar is het moet een simpel scriptje zijn (niet dat MD5 hashes moeilijk zijn, maar het gaat meer om dat er iets op zit, dan niets).
Lightzondag 8 februari 2009 @ 22:39
quote:
Op zondag 8 februari 2009 20:28 schreef Drenthe het volgende:
Tip:

Sha1 al je velden al voordat je ze opgestuurd hebt (en dit dus dmv javascript). Misschien overbodig voor wat jij wil doen, maar toch een vereiste voor elke zelfrespecterend script.
Waarom zou je willen hashen in javascript? Dat draagt weinig bij aan de veiligheid van de site, en je maakt de site ontoegankelijk voor mensen die geen javascript gebruiken (text-only browsers bijvoorbeeld). Als het je te doen is om te voorkomen dat mensen het wachtwoord kunnen afluisteren, dan kun je beter https gebruiken.
ralfiezondag 8 februari 2009 @ 22:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start();
if (!$_SESSION['loggedin'])
{
    if (!isset($_SERVER['PHP_AUTH_USER']))
   {
      header('WWW-Authenticate: Basic realm="Beveiligde pagina"');
      header('HTTP/1.0 401 Unauthorized');
      exit('Je moet inloggen om dit te zien!');
   }
   else if ($_SERVER['PHP_AUTH_USER'] == 'gebruikersnaam' && $_SERVER['PHP_AUTH_PW'] == 'wachtwoord')
   {
      $_SESSION['loggedin']=true;
   }
   else exit('Je mag dit niet zien!');   
}
?>
DIT IS BEVEILIGD!
Simpeler dat dit krijg je het niet denk ik.

[ Bericht 38% gewijzigd door ralfie op 09-02-2009 17:11:04 ]
cablegunmastermaandag 9 februari 2009 @ 11:13
TS nergens te bekennen
Drenthemaandag 9 februari 2009 @ 12:49
quote:
Op zondag 8 februari 2009 22:39 schreef Light het volgende:

[..]

Waarom zou je willen hashen in javascript? Dat draagt weinig bij aan de veiligheid van de site, en je maakt de site ontoegankelijk voor mensen die geen javascript gebruiken (text-only browsers bijvoorbeeld). Als het je te doen is om te voorkomen dat mensen het wachtwoord kunnen afluisteren, dan kun je beter https gebruiken.
Ik weet niet precies hoe ze het kunnen doen, maar als een hacker gaat ' sniffen' , kan hij alles zien wat de client via HTTP verstuurd (dus ook ongehaste wachtwoorden en usernames).
ralfiemaandag 9 februari 2009 @ 12:56
quote:
Op maandag 9 februari 2009 12:49 schreef Drenthe het volgende:

[..]

Ik weet niet precies hoe ze het kunnen doen, maar als een hacker gaat ' sniffen' , kan hij alles zien wat de client via HTTP verstuurd (dus ook ongehaste wachtwoorden en usernames).
nou, en dan ziet hij de gehashte wachtwoorden en usernames, stuurt ie die naar de server, wordt ie ook ingelogd. Net zo makkelijk
HuHumaandag 9 februari 2009 @ 13:34
quote:
Op maandag 9 februari 2009 12:49 schreef Drenthe het volgende:

[..]

Ik weet niet precies hoe ze het kunnen doen, maar als een hacker gaat ' sniffen' , kan hij alles zien wat de client via HTTP verstuurd (dus ook ongehaste wachtwoorden en usernames).
Voor een man-in-the-middle aanval maakt hashen of niet hashen geen verschil. Het gaat er om dat je met de data die over de lijn gaat kunt inloggen. Dat kan altijd, of het nu wel of niet gehashed is. Een beveiligde verbinding via HTTPS is dan de enige optie.
Roy_Tmaandag 9 februari 2009 @ 16:03
quote:
Op zondag 8 februari 2009 16:48 schreef Sar2007 het volgende:
login.php
[ code verwijderd ]

Dan zet je boven elke beveiligde pagina:
[ code verwijderd ]

loguit.php
[ code verwijderd ]

Die is natuurlijk niet heel veilig, maar werkt wel!
IsSet()? Nieuwe mode om isset() zo te schrijven?
Roy_Tmaandag 9 februari 2009 @ 16:04
quote:
Op zondag 8 februari 2009 22:51 schreef ralfie het volgende:

[ code verwijderd ]

Simpeler dat dit krijg je het niet denk ik.
Mits je de ?> even iets omhoog zet, tenzij je een PHP error wilt
ralfiemaandag 9 februari 2009 @ 17:10
quote:
Op maandag 9 februari 2009 16:04 schreef Roy_T het volgende:

[..]

Mits je de ?> even iets omhoog zet, tenzij je een PHP error wilt
nee, das die klote phpdinges van fok. Stript alle <? en ?> en plaatst die aan het begin en eind. zal het wel ff in een code tag rossen
SunBoommaandag 9 februari 2009 @ 18:49
Bedankt iedereen!

Alles werkt nu naar behoren!

Ik ga het script van ralfie gebruiken omdat die simpelweg het makkelijkst is.