Loginscripts revisited
Door Jan Koehoorn, 22 jaar geleden, 15.726x bekeken
Méér dan alleen een loginscript
Gesponsorde koppelingen
Inhoudsopgave
Er zijn 140 reacties op 'Loginscripts revisited'
Gesponsorde koppelingen
Achja, zo kan ie ook ;-)
Goed uitgelegd, al hoe wel ik bij sommige dingen mijzelf toch nog even afvroeg hoe dat nou in elkaar zat. De stijl van PHP'en is toch verschillend. Toch vraag ik mij af, als je op de volgende manier een hash (controlecode toch?) toevoegd aan een cookie:
En die laat je in een menu checken, en zodra de hash niet meer klopt met wat er in de database staat, dat hij dan de cookies verwijdert en de sessie afbreekt zodat je uitlogt, is dan de hash veilig en kun je dan w?l cookies gebruiken i.c.m. sessies? Lijkt mij wel toch?
Goed uitgelegd, al hoe wel ik bij sommige dingen mijzelf toch nog even afvroeg hoe dat nou in elkaar zat. De stijl van PHP'en is toch verschillend. Toch vraag ik mij af, als je op de volgende manier een hash (controlecode toch?) toevoegd aan een cookie:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$hash = rand(300000, 6000000) . "" . str_replace("1", "a", md5($jewachtwoord)) . "site" . date();
?>
$hash = rand(300000, 6000000) . "" . str_replace("1", "a", md5($jewachtwoord)) . "site" . date();
?>
En die laat je in een menu checken, en zodra de hash niet meer klopt met wat er in de database staat, dat hij dan de cookies verwijdert en de sessie afbreekt zodat je uitlogt, is dan de hash veilig en kun je dan w?l cookies gebruiken i.c.m. sessies? Lijkt mij wel toch?
Misschien is een kleine toevoeging tegen sessie kapers op zijn plaats: Sla het IP adres (waarmee word ingelogd) in een sessie variabelen op en deze in authenticatie te controlleren met het huidige ip adres.
Daarnaast zie ik geen problemen met het opslaan van iemands naam in een sessie variabelen. Waarom zal dit gevaarlijk zijn?
Verder top tutorial. zo en dan nu eens de bezem door de script lib halen admins
Daarnaast zie ik geen problemen met het opslaan van iemands naam in een sessie variabelen. Waarom zal dit gevaarlijk zijn?
Verder top tutorial. zo en dan nu eens de bezem door de script lib halen admins
Over cookies vs sessies: wat ik niet begrijp, is dat je aangeeft dat cookies niet veilig zijn omdat ze gestolen kunnen worden. Maar om een login met sessies te laten functioneren, MOET er een cookies van en naar de browser gestuurd worden met de SessieID. Dus wat is het verschil in dat opzicht?
Ik begrijp wel dat er verschillen zijn in de manier waarop evt data opgeslagen wordt (in de cookie client side of in de sessie op de server) maar de manier waarop het uitgelegd wordt in de tutorial vindt ik een beetje vreemd, omdat sessies ook gebruik maken van cookies. Die ook gestolen kunnen worden. Waarmee nog steeds een ander op mijn naam kan inloggen en doen wat ik alleen zou moeten kunnen doen.
(wil niet klagen, probeer eea alleen maar te begrijpen/duidelijk te krijgen)
Ik begrijp wel dat er verschillen zijn in de manier waarop evt data opgeslagen wordt (in de cookie client side of in de sessie op de server) maar de manier waarop het uitgelegd wordt in de tutorial vindt ik een beetje vreemd, omdat sessies ook gebruik maken van cookies. Die ook gestolen kunnen worden. Waarmee nog steeds een ander op mijn naam kan inloggen en doen wat ik alleen zou moeten kunnen doen.
(wil niet klagen, probeer eea alleen maar te begrijpen/duidelijk te krijgen)
@matthijs voor zoevr ik weet is een cookie is niet nodig. HEt kan ook middels de $_GET methode en de beste methode is via een hidden valaue in een form. Overigens zoekt PHP zelf uit welke van de drie methodes gebruikt wordt. Dit is ondermeer afhankelijk van de instellingen op de pc van de client.
@ matthijs: zowel sessions als cookies zijn niet 100% procent veilig. Maar uit mijn tut blijkt dat het niet nodig is om je username en password in een sessie te zetten, dus waarom zou je dat dan doen? Cookies worden inderdaad gezet aan de kant van de client en zijn dus gemakkelijker te manipuleren. Om session hijacking te voorkomen in mijn tut, zou je authenticatie.php kunnen uitbreiden met de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start ();
// anti - session hijacking code
// geef een eigen map op waar PHP de sessies bewaart
// deze wel even aanmaken in de root van je site
ini_set('session.save_path', '../jankoehoorn');
// verander de naam van de sessie
ini_set('session.name', 'hash');
// check op session hijacken
if (!isset($_SESSION['ip'])) {
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
// hijacking! doe er iets mee (mail sturen of zo)
}
// de gegevens voor de DB connectie
require '../../../db_config.php';
?>
session_start ();
// anti - session hijacking code
// geef een eigen map op waar PHP de sessies bewaart
// deze wel even aanmaken in de root van je site
ini_set('session.save_path', '../jankoehoorn');
// verander de naam van de sessie
ini_set('session.name', 'hash');
// check op session hijacken
if (!isset($_SESSION['ip'])) {
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
// hijacking! doe er iets mee (mail sturen of zo)
}
// de gegevens voor de DB connectie
require '../../../db_config.php';
?>
1. Een sleep gebruiken bij een login is niet zo verstandig ivb met veiligheid ( had daar 'ergens' nog wat over gelezen)
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.
2. Als je een 'bruteforce' wilt stoppen is het beter om het ip in database te zetten , en dat je na bijv 3 foute logins binnen een 'x' aantal minuten het ip banned.
Bruteforce programma's gebruiken een ip/proxy circa 3/4 keer per bruteforce , met een gemiddelde van 120 bruteforces per seconde.
Die proxy's gaan dus heel snel dood op die manier..
Het is ook niet meer zo makkelijk om goede anonieme proxy's te vinden die geschikt zijn voor bruteforcen , de meeste proxy's op grote sites werken niet goed daarmee...
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.
2. Als je een 'bruteforce' wilt stoppen is het beter om het ip in database te zetten , en dat je na bijv 3 foute logins binnen een 'x' aantal minuten het ip banned.
Bruteforce programma's gebruiken een ip/proxy circa 3/4 keer per bruteforce , met een gemiddelde van 120 bruteforces per seconde.
Die proxy's gaan dus heel snel dood op die manier..
Het is ook niet meer zo makkelijk om goede anonieme proxy's te vinden die geschikt zijn voor bruteforcen , de meeste proxy's op grote sites werken niet goed daarmee...
Quote:
1. Een sleep gebruiken bij een login is niet zo verstandig ivb met veiligheid ( had daar 'ergens' nog wat over gelezen)
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.
Het geeft namelijk een opening voor hackers .. ook al is het maar 3 sec , vanaf meerdere computers kan er wel degelijk schade worden toegedaan.
Eerst bewijs, dan pas iemand beschuldigen. In principe is PHP dan totaal bevroren. Geen invoer & geen uitvoer. Als er een veiligheidslek zou moeten zijn, dan zou dat gemaakt moeten zijn door het stuk script dat voor de sleep komt. maar dan nog, dingen als cookies en sessies worden pas actief, 'gecommit' bij het afsluiten van het php-proces.
Daarbij, met een sleep van 3 seconden kan je in theorie maar 20 maal per minuut proberen in te loggen. Daarbij komt nog de verwerkingstijd van de server, de lantency van het op elkaar antwoorden, zo weer 5 seconden weg. Nog maar 17 maal per minuut. Er vanuitgaande dat je de gebruikersnaam al hebt en dat het wachtwoord een beetje fatsoenlijk is: 8 ^ (26(letters) + 26(hoofdletters) + 10(cijfers) + 20(vreemde karakters)) = 82 ^ 8 = 2.0e15... Dat gedeeld door 17 is ongeveer 8.35e10 dagen werk... Het kost minder tijd om gewoon even op zoek te gaan naar het wachtwoord in het slachtoffer zijn boeken, geheugen (social engineering) of achtergrond.
Ik gebruik cookies om te verwijzen naar een regel in mijn database. Bij iedere aanroep wordt die link, een lekkere lange random string van allemaal tekens vervangen door een nieuwe. Zo kan er maar 1 browser tegelijk ingelogd zijn, want als eentje de pagina aanvraagt voor de andere, dan is de unieke string van de andere niet meer gekoppeld aan de regel in de database (die is immers al vernieuwd bij de aanvraag van de ene). De cookie-jatter moet dus zijn nieuwe cookie instellen voordat het potenti?le slachtoffer een andere pagina opvraagt. Daarbij is hij gekoppeld aan een ip-adres (sorry voor iedereen die om de zoveel tijd wisselt van IP)
@ Jelmer: kijk, dat is weer een andere invalshoek.
@ Donster: zo is hij ook geschreven; als een opzet die je zelf uit kunt breiden. Het komt nog steeds regelmatig voor dat mensen vragen om een inlogscript. In plaats van ze zomaar een script te laten kopieren hoop ik dat ze wat aan deze tut hebben.
@ Donster: zo is hij ook geschreven; als een opzet die je zelf uit kunt breiden. Het komt nog steeds regelmatig voor dat mensen vragen om een inlogscript. In plaats van ze zomaar een script te laten kopieren hoop ik dat ze wat aan deze tut hebben.
Kijk als ik dan cookie set doe ik dat ook natuurlijk veilig net zoals jelmer ong.
verder een zeer handige tut wat hoop ik onnodige nieuwe niks toevoegende loginscripts weghoud uit de script lib:)
GR. mebus!
Code (php)
verder een zeer handige tut wat hoop ik onnodige nieuwe niks toevoegende loginscripts weghoud uit de script lib:)
GR. mebus!
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
?>
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
?>
Waarom sla je de gebruikersnaam ook niet gewoon op met een sha1-hash?
Dat lijkt me n?g veel veiliger.
Je zit dan wel met het probleem, dat je de gebruiker niet kunt begroeten met een gebruikersnaam, maar daar kun je dezelfde methode als PHPhulp voor gebruiken. Gewoon een echte naam laten opgeven en daarmee laten begroeten...
Als je database dan per ongeluk wordt 'gehackt', zijn in ieder geval de gebruikersnamen en wachtwoorden veilig...
"Maar uit mijn tut blijkt dat het niet nodig is om je username en password in een sessie te zetten, dus waarom zou je dat dan doen?"
@Jan: Dat zeg ik toch ook niet?
Het enige wat ik wilde aangeven is dat 1 van je kopjes heet: "Gebruik geen cookies". Maar bij het gebruik van sessies wordt er net zo goed een cookie naar de browser gestuurd. Anders is het onmogelijk een sessie aan een bepaalde gebruiker te koppelen. Dus ik wilde alleen maar aangeven dat dat kopje verwarrend is/op mij overkomt.
En over het controleren aan de hand van IP adres: er zijn mensen die via ISP internetten waarbij het IP adres om de haverklap verandert (AOL is er 1 van). Dus die mensen maak je het onmogelijk van je site/applicatie gebruik te maken. Het is dus de vraag of je wel naar IP moet kijken.
@Jan: Dat zeg ik toch ook niet?
Het enige wat ik wilde aangeven is dat 1 van je kopjes heet: "Gebruik geen cookies". Maar bij het gebruik van sessies wordt er net zo goed een cookie naar de browser gestuurd. Anders is het onmogelijk een sessie aan een bepaalde gebruiker te koppelen. Dus ik wilde alleen maar aangeven dat dat kopje verwarrend is/op mij overkomt.
En over het controleren aan de hand van IP adres: er zijn mensen die via ISP internetten waarbij het IP adres om de haverklap verandert (AOL is er 1 van). Dus die mensen maak je het onmogelijk van je site/applicatie gebruik te maken. Het is dus de vraag of je wel naar IP moet kijken.
@ Matthijs: sessions lijken op cookies, maar als ik zeg: gebruik geen cookies, dan bedoel ik set_cookie enz. Blijkt lijkt mij ook duidelijk uit de alineatekst eronder:
Quote:
Gebruik geen cookies
Zeker, cookies zijn handig. Een gebruiker hoeft niet steeds opnieuw in te loggen. Je kunt bijvoorbeeld een cookie zetten die drie dagen duurt. Dat betekent dus dat iedereen die achter die computer zit drie dagen niet in hoeft te loggen en dus overal bij kan. Bovendien kunnen cookies gestolen worden. Niet doen, dus.
Zeker, cookies zijn handig. Een gebruiker hoeft niet steeds opnieuw in te loggen. Je kunt bijvoorbeeld een cookie zetten die drie dagen duurt. Dat betekent dus dat iedereen die achter die computer zit drie dagen niet in hoeft te loggen en dus overal bij kan. Bovendien kunnen cookies gestolen worden. Niet doen, dus.
@matthijs
Zodra ze de login button indrukken en na de beveiligde pagina gaan blijft hun ip gewoon hetzelfde.
Het ip verandert aleen als je de internet browser sluit en opnieuw op internet gaat? .. lijkt mij iig!
Het enige nadeel is dat mensen niet ingelogt blijven , als ze hun browser sluiten .. maar kwa login is er niks aan het handje volgens mij...
Quote:
En over het controleren aan de hand van IP adres: er zijn mensen die via ISP internetten waarbij het IP adres om de haverklap verandert (AOL is er 1 van). Dus die mensen maak je het onmogelijk van je site/applicatie gebruik te maken. Het is dus de vraag of je wel naar IP moet kijken.
Zodra ze de login button indrukken en na de beveiligde pagina gaan blijft hun ip gewoon hetzelfde.
Het ip verandert aleen als je de internet browser sluit en opnieuw op internet gaat? .. lijkt mij iig!
Het enige nadeel is dat mensen niet ingelogt blijven , als ze hun browser sluiten .. maar kwa login is er niks aan het handje volgens mij...
Jan Koehoorn: ik had de code nog niet goed bekeken. Maar gaat er geen alarmbel rinkelen als je dit
check_login ($_POST['username'], $_POST['password'])
en
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
ziet? Ik hoop dat je dit snel kunt aanpassen voordat mensen dit op een live server gaan gebruiken.
check_login ($_POST['username'], $_POST['password'])
en
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
ziet? Ik hoop dat je dit snel kunt aanpassen voordat mensen dit op een live server gaan gebruiken.
1.
Je bent alleen maar aan het zeiken, en nieuwe dingen aan het vinden hoe het wel en zo moet. Dit is grote afstand van het gemiddelde aantal loginsystemen ??n van de betere. Hierbij wordt het ook nog wel uitgelegd
2.
Denk dat je meer moet verdiepen in PHP
Kortom, de functie wordt aangeroepen.
En de POST wordt gezet in de variabelen $username en $password van de functie.
Quote:
(wil niet klagen, probeer eea alleen maar te begrijpen/duidelijk te krijgen)
Je bent alleen maar aan het zeiken, en nieuwe dingen aan het vinden hoe het wel en zo moet. Dit is grote afstand van het gemiddelde aantal loginsystemen ??n van de betere. Hierbij wordt het ook nog wel uitgelegd
2.
Denk dat je meer moet verdiepen in PHP
Code (php)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function check_login ($username, $password) {
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
//...
?>
function check_login ($username, $password) {
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
//...
?>
Kortom, de functie wordt aangeroepen.
En de POST wordt gezet in de variabelen $username en $password van de functie.
Kalle, jammer dat het zo overkomt. Dat is niet mijn bedoeling. Een beetje gezond kritisch naar een stukje code kijken mag toch wel? Denk dat iedereen daar wat van leert. Mocht ik een fout maken in een reactie, dan wijst iemand anders mij daar wel weer op. Prima. No hard feelings, en excuses als iemand zich beklaagd heeftgevoeld door mijn reacties.
Verder nog even over het andere punt: de code functioneert wel, daar heb je gelijk in. Maar zoals de code nu is is het script kwetsbaar voor sql-injectie. De $username en password worden niet ge-escaped. Ofwel je script met als doel ongeauthoriseerden buiten te houden wordt door de eerste de beste scriptkiddie gekraakt.
Verder nog even over het andere punt: de code functioneert wel, daar heb je gelijk in. Maar zoals de code nu is is het script kwetsbaar voor sql-injectie. De $username en password worden niet ge-escaped. Ofwel je script met als doel ongeauthoriseerden buiten te houden wordt door de eerste de beste scriptkiddie gekraakt.
Offtopic:
Het ip adres kan alleen gewijzigd worden als je je opnieuw aanmeld op het ADSL/Kabel/Internet netwerk. De server van je provider wijst je dan een IP adres aan. Dit gebeurt bijvoorbeeld als je je modem aan-uit-zet. Sommige providers laten IP adressen hetzelfde.
Als je IP adres tijdens een 'internet sessie' in het algemeen zomaar zou veranderen zou de server niet meer weten aan wie hij de pagina pakketjes moest sturen, dan zou de ene zomaar een pakketje van iemand anders ontvangen. Lijkt me niet erg handig.
Het ip adres kan alleen gewijzigd worden als je je opnieuw aanmeld op het ADSL/Kabel/Internet netwerk. De server van je provider wijst je dan een IP adres aan. Dit gebeurt bijvoorbeeld als je je modem aan-uit-zet. Sommige providers laten IP adressen hetzelfde.
Als je IP adres tijdens een 'internet sessie' in het algemeen zomaar zou veranderen zou de server niet meer weten aan wie hij de pagina pakketjes moest sturen, dan zou de ene zomaar een pakketje van iemand anders ontvangen. Lijkt me niet erg handig.
Aanvulling: Bescherming tegen MySQL injection was er al voor een deel, omdat ik de vars binnen de queries buiten quotes had. Nog even mysql_real_escape_string eroverheen en klaar ben je. Ik wacht even af tot de tips een beetje uitgerateld zijn, dan verwerk ik ze allemaal in ??n keer. Tot zover alvast bedankt voor de bijdragen.
Quote:
uhm ...
Ben ik heel erg stom als ik vraagt of iemand een .sql kan maken? :$
Ik wil dit systeem graag gebruiken omdat het lekker basic is maar toch goed!
Maar ik kan niet wijs worden van de SQL. Als iemand heel simpel een sql'letje kan maken dan heeeel graag!
Ben ik heel erg stom als ik vraagt of iemand een .sql kan maken? :$
Ik wil dit systeem graag gebruiken omdat het lekker basic is maar toch goed!
Maar ik kan niet wijs worden van de SQL. Als iemand heel simpel een sql'letje kan maken dan heeeel graag!
De tabel ziet er heel simpel uit:
Na het inloggen krijg ik de volgende melding op secure_page.php:
Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23
Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24
Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26
Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26
Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php:23) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 10
Gezien de melding 'headers already sent' dacht ik dat je 'ob_start ();' was vergeten. Klein foutje verder niets aan de hand dacht ik. Maar als ik in authenticatie.php ob_start(); toevoeg aan het script dan moet ik opnieuw inloggen en als ik op inloggen klik gebeurd er niets meer ... althans hij gaat laden en komt op dezelfde pagina terug. index.php dus!
Wat kan er fout zitten? Iemand enig idee?
Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 23
Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 24
Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26
Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 26
Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php:23) in /home/jurgen/domains/***.nl/public_html/cms/logins/authenticatie.php on line 10
Gezien de melding 'headers already sent' dacht ik dat je 'ob_start ();' was vergeten. Klein foutje verder niets aan de hand dacht ik. Maar als ik in authenticatie.php ob_start(); toevoeg aan het script dan moet ik opnieuw inloggen en als ik op inloggen klik gebeurd er niets meer ... althans hij gaat laden en komt op dezelfde pagina terug. index.php dus!
Wat kan er fout zitten? Iemand enig idee?
@ Rafael: bedankt :-)
@ Jurgen: Er gaat blijkbaar iets fout met het connecten met je DB. In mijn voorbeeld include ik ergens db_config.php
Daar moet je je eigen bestand voor in de plaats zetten met de goede connectgegevens. Het zou ook kunnen dat je PHP versie de functie mysql_real_escape_string nog niet ondersteunt. In dat geval gebruik je addslashes er voor in de plaats.
Dat headers already sent komt doordat er een foutmelding op het scherm komt. In principe moet die ob_start niet nodig zijn, want het script heeft nergens output.
@ Jurgen: Er gaat blijkbaar iets fout met het connecten met je DB. In mijn voorbeeld include ik ergens db_config.php
Daar moet je je eigen bestand voor in de plaats zetten met de goede connectgegevens. Het zou ook kunnen dat je PHP versie de functie mysql_real_escape_string nog niet ondersteunt. In dat geval gebruik je addslashes er voor in de plaats.
Dat headers already sent komt doordat er een foutmelding op het scherm komt. In principe moet die ob_start niet nodig zijn, want het script heeft nergens output.
Die foutmeldingen betekenen dat er geen verbinding is met de database. Dus misschien is een van de gegevens niet juist ingevuld (in je dp_config bestand). Heb je getest of die wel functioneert?
De headers already sent melding komt weer door de foutmelding die veroorzaakt is door de eerdere errors. Die zijn immers al verstuurd.
De headers already sent melding komt weer door de foutmelding die veroorzaakt is door de eerdere errors. Die zijn immers al verstuurd.
Edit:
jan was me voor
Ik heb mysql_real_escape_string vervangen door addslashes en nu zijn een paar foutmeldingen verdwenen. Nu heb ik nog over:
Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20
Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20
Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php:20) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 10
Regel 20 bij mij:
if ($res = mysql_query ($sql)) {
Warning: mysql_query(): Access denied for user 'apache'@'localhost' (using password: NO) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20
Warning: mysql_query(): A link to the server could not be established in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 20
Warning: Cannot modify header information - headers already sent by (output started at /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php:20) in /home/jurgen/domains/****.nl/public_html/cms/logins/authenticatie.php on line 10
Regel 20 bij mij:
if ($res = mysql_query ($sql)) {
Ik zie je nergens een verbinding maken ..
Doe dit eens:
Doe dit eens:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$dbhost = 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
mysql_select_db($dbname, $db) or die (mysql_error());
?>
$dbhost = 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
mysql_select_db($dbname, $db) or die (mysql_error());
?>
Oke dit werkt gelukkig wel ;) Maar nu is er alweer een volgend probleem.
Als ik inlog gaat ie even laden maar hij blijft op dezelfde pagina. (index.php)
In mijn authenticatie bestand heb ik
function to_login () {
sleep (3);
header ('Location: http://www.****.nl/cms/logins/'); // NIET VERGETEN AAN TE PASSEN!!!
Die wijst gewoon naar het index bestand ... zit daar een fout of is het toch iets anders?
Als ik inlog gaat ie even laden maar hij blijft op dezelfde pagina. (index.php)
In mijn authenticatie bestand heb ik
function to_login () {
sleep (3);
header ('Location: http://www.****.nl/cms/logins/'); // NIET VERGETEN AAN TE PASSEN!!!
Die wijst gewoon naar het index bestand ... zit daar een fout of is het toch iets anders?
@ matthijs(& Webmakerij) over AOL:
AOL gebruikers hun IP adres verandert eens iedere .(.) minu(u)t(en), EN/OF na iedere submit. Dit kan voor AOL omdat hun ip range heel groot is!
USA:
NetRange: 172.128.0.0 - 172.191.255.255
191-128=63 * 255 * 255 = 4.096.575
UK:
inetnum: 195.93.0.0 - 195.93.63.255
63 * 255 = 16.065
60 / 2 = (simpel) 30
16065(AOL UK) / 30 / 24(uur) = 22.3125 (dagen dat je 24 uur/dag online bent, zonder dat je IP langer dan 2 minuten hetzelfde hoeft te zijn/is)
Wat ik heb gehoord, openen deze AOL gebruikers een site via een speciaal AOL-browser. Als zij het zouden openen met IE, FF, Opera, verzin maar wat, zouden ze het normaal kunnen bezoeken(of in ieder geval, langer dan normaal). (na een aantal klachten, dat als iemand inlogt direct terug gestuurt word na de login pagina, heb ik deze tip gegeven, en verder nooit meer iets van gehoord)
---------------------------------------
Over sessies:
Deze kunnen alleen verandert worden, of uitgelezen, via de webserver, heeft iemand geen toegang daartoe, hoe wil die dan een sessie veranderen/uitlezen?
---------------------------------------
Wat ik gebruik in login systeem, is het volgende:
Een gebruiker logt in met een gebruikersnaam, en wachtwoord. Deze gebruiker kan dan ook selecteren of hij/zij de sessie IP beveiliging wilt inschakelen, of juist niet, door een hokje aan te klikken/kruisen(automatisch is dit hokje aangekruist). Hier staat een vette ! bij die aangeeft dat ze het alleen moeten uitschakelen wanneer ze direct na het inloggen, of een kleine tijd later, terug geschopt worden na de login pagina. Is dit hokje ge de-selecteerd(dus, als word aangegeven dat het IP niet gecontroleert moet worden) word er een nieuwe sessies geopent, die dan weer aangeeft dat hij vooral NIET het IP moet beveiligen.
Omdat maar 1 op de 100 gebruikers deze optie uitschakelt, zal een hacker snel stoppen, want die denkt dat hij niks met alles sessies kan, er een perfecte beveiliging op zit, of wat dan ook(ervan uitgaand dat deze niks weet van de PHP-codes).
Voorbeeld login:
Voorbeeld include(ik zou er een functie van maken, maar dit is wat makkelijker als voorbeeld):
---------------------------------------
Beetje off-topic:
@ Donster: als iemand dan toch nog een PHP code kan invoegen kan deze heel makkelijk je wachtwoord uitlezen, gebruik dit:
Edit:
Bericht geoptimaliseert, en MySQL verbinding wat bezoeker-vvreidelijker gemaakt...
AOL gebruikers hun IP adres verandert eens iedere .(.) minu(u)t(en), EN/OF na iedere submit. Dit kan voor AOL omdat hun ip range heel groot is!
USA:
NetRange: 172.128.0.0 - 172.191.255.255
191-128=63 * 255 * 255 = 4.096.575
UK:
inetnum: 195.93.0.0 - 195.93.63.255
63 * 255 = 16.065
60 / 2 = (simpel) 30
16065(AOL UK) / 30 / 24(uur) = 22.3125 (dagen dat je 24 uur/dag online bent, zonder dat je IP langer dan 2 minuten hetzelfde hoeft te zijn/is)
Wat ik heb gehoord, openen deze AOL gebruikers een site via een speciaal AOL-browser. Als zij het zouden openen met IE, FF, Opera, verzin maar wat, zouden ze het normaal kunnen bezoeken(of in ieder geval, langer dan normaal). (na een aantal klachten, dat als iemand inlogt direct terug gestuurt word na de login pagina, heb ik deze tip gegeven, en verder nooit meer iets van gehoord)
---------------------------------------
Over sessies:
Deze kunnen alleen verandert worden, of uitgelezen, via de webserver, heeft iemand geen toegang daartoe, hoe wil die dan een sessie veranderen/uitlezen?
---------------------------------------
Wat ik gebruik in login systeem, is het volgende:
Een gebruiker logt in met een gebruikersnaam, en wachtwoord. Deze gebruiker kan dan ook selecteren of hij/zij de sessie IP beveiliging wilt inschakelen, of juist niet, door een hokje aan te klikken/kruisen(automatisch is dit hokje aangekruist). Hier staat een vette ! bij die aangeeft dat ze het alleen moeten uitschakelen wanneer ze direct na het inloggen, of een kleine tijd later, terug geschopt worden na de login pagina. Is dit hokje ge de-selecteerd(dus, als word aangegeven dat het IP niet gecontroleert moet worden) word er een nieuwe sessies geopent, die dan weer aangeeft dat hij vooral NIET het IP moet beveiligen.
Omdat maar 1 op de 100 gebruikers deze optie uitschakelt, zal een hacker snel stoppen, want die denkt dat hij niks met alles sessies kan, er een perfecte beveiliging op zit, of wat dan ook(ervan uitgaand dat deze niks weet van de PHP-codes).
Voorbeeld login:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
include("../include_bestand.php");
if(isset($_SESSION['id'])) { // als gebruikers is ingelogt, deze uitloggen voor veiligheid, en tegen fouten
session_destroy(); // verwijder dan de sessie
header("Refresh: 0;"); // Zorg dat de include geen gegevens terug stuurt door te refreshen
exit; // stop met script
}
if(isset($_POST['login'],$_POST['pass'])) {
/* login check of gebruiker bestaat(en al het andere) voer het volgende uit bij succes: */
$_SESSION['id'] = $me[0]; // $me->id bij mysql_fetch_object
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR']; // geen uitgebreide controle, omdat het dan juist fout kan gaan
if(isset($_POST['ipcheck']) AND $_POST['ipcheck'] == 1)
$_SESSION['ipcheck'] = true;
else
$_SESSION['ipcheck'] = false;
header("Location: index.php");
echo "<a href='./index.php'>Logged in, now redirecting, if your page doesn't redirect, please click here.</a>";
exit;
/* else - als foute login, kijk waarom, account niet actief? account verbannen? etc? echo dat dan! */
}
?>
<b>Login</b>
Genbruikersnaam: <input type="text" name="login">
Wachtwoord: <input type="text" name="pass">
IP Controle: <a href="javascript:alert('Als je niet kan inloggen, omdat je daarna direct weer word uitgelogt, de-selecteer dan aub deze knop. Als het normaal werkt met deze knop geselecteert, word het zeer aangeraden deze knop geselecteerd te houden!');">[!]</a> <input type="checkbox" name="ipcheck" value="1" checked>
include("../include_bestand.php");
if(isset($_SESSION['id'])) { // als gebruikers is ingelogt, deze uitloggen voor veiligheid, en tegen fouten
session_destroy(); // verwijder dan de sessie
header("Refresh: 0;"); // Zorg dat de include geen gegevens terug stuurt door te refreshen
exit; // stop met script
}
if(isset($_POST['login'],$_POST['pass'])) {
/* login check of gebruiker bestaat(en al het andere) voer het volgende uit bij succes: */
$_SESSION['id'] = $me[0]; // $me->id bij mysql_fetch_object
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR']; // geen uitgebreide controle, omdat het dan juist fout kan gaan
if(isset($_POST['ipcheck']) AND $_POST['ipcheck'] == 1)
$_SESSION['ipcheck'] = true;
else
$_SESSION['ipcheck'] = false;
header("Location: index.php");
echo "<a href='./index.php'>Logged in, now redirecting, if your page doesn't redirect, please click here.</a>";
exit;
/* else - als foute login, kijk waarom, account niet actief? account verbannen? etc? echo dat dan! */
}
?>
<b>Login</b>
Genbruikersnaam: <input type="text" name="login">
Wachtwoord: <input type="text" name="pass">
IP Controle: <a href="javascript:alert('Als je niet kan inloggen, omdat je daarna direct weer word uitgelogt, de-selecteer dan aub deze knop. Als het normaal werkt met deze knop geselecteert, word het zeer aangeraden deze knop geselecteerd te houden!');">[!]</a> <input type="checkbox" name="ipcheck" value="1" checked>
Voorbeeld include(ik zou er een functie van maken, maar dit is wat makkelijker als voorbeeld):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();
if(isset($_SESSION['id'],$_SESSION['IP'],$_SESSION['ipcheck'])) {
if($_SESSION['ipcheck'] AND $_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
session_destroy();
header("Location: login.php");
exit;
} else {
/* queries die ECHT nodig zijn */
$logged_in = 1;
}
} else {
header("Location: login.php");
exit;
}
?>
session_start();
if(isset($_SESSION['id'],$_SESSION['IP'],$_SESSION['ipcheck'])) {
if($_SESSION['ipcheck'] AND $_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
session_destroy();
header("Location: login.php");
exit;
} else {
/* queries die ECHT nodig zijn */
$logged_in = 1;
}
} else {
header("Location: login.php");
exit;
}
?>
---------------------------------------
Beetje off-topic:
@ Donster: als iemand dan toch nog een PHP code kan invoegen kan deze heel makkelijk je wachtwoord uitlezen, gebruik dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$dbhost = 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
$dbhost = 'localhost';
$dbuser = '***';
$dbpass = '***';
$dbname = '***';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
Edit:
Bericht geoptimaliseert, en MySQL verbinding wat bezoeker-vvreidelijker gemaakt...
Ik krijg de volgende foutmelding als ik met een niet in de Db bestaande user inlog:
Warning: Cannot modify header information - headers already sent by (output started at C:\webs\test\db_config.php:15) in C:\webs\test\authenticatie.php on line 25
Als ik inlog met een in de Db aanwezige user gaat het inloggen wel goed. Ik heb alles geinstalleerd zoals in de tutorial aangegeven.
Iemand enig idee wat er fout is ? Alvast bedankt.
Warning: Cannot modify header information - headers already sent by (output started at C:\webs\test\db_config.php:15) in C:\webs\test\authenticatie.php on line 25
Als ik inlog met een in de Db aanwezige user gaat het inloggen wel goed. Ik heb alles geinstalleerd zoals in de tutorial aangegeven.
Iemand enig idee wat er fout is ? Alvast bedankt.
@ Erwin: net even online getest op http://www.jankoehoorn.nl/tuts/php/login/ en daar gaat het prima. Als je het script overneemt, let er dan op dat er niets naar de browser geschreven wordt voordat die header verstuurd wordt.
ik wil nu op de secure_page.php het session[id] gegeven gebruiken (tenminste... ik wil de id vna de gebruiker die ingelogt is gebruiken) maar dit lukt me niet...
kan iemand me misschien zeggen hoe dit moet? ik heb het op veel manieren geprobeert zoals:
echo $_SESSION['id'];
ik heb het ook op verschillende plaatsen geprobeert maar dit werkt allemaal niet. Wat doe ik verkeerd?
kan iemand me misschien zeggen hoe dit moet? ik heb het op veel manieren geprobeert zoals:
echo $_SESSION['id'];
ik heb het ook op verschillende plaatsen geprobeert maar dit werkt allemaal niet. Wat doe ik verkeerd?
Quote:
Twan van de Moosdijk schreef op 01.09.2006 14:43:
Je bedoelt die code gewoon simpelweg in de secure_page.php neerzetten? dit doet namelijk helemaal niets.
Je bedoelt die code gewoon simpelweg in de secure_page.php neerzetten? dit doet namelijk helemaal niets.
Ergens op secure_page.php dit neerzetten en kijken wat eruit rolt.
Ik snap het nog niet helemaal, hoe kun je zorgen dat er een pagina alleen gezien kan worden door users die zijn ingelogd?
Want die secure page werkt niet helemaal goed bij mij, als ik namelijk toch naar die pagina zonder in te loggen krijg ik deze errors:
en daaronder krijg ik gewoon de pagina te zien, en ik heb alles gewoon zo overgenomen als in de tut.
m.v.g. zap
Want die secure page werkt niet helemaal goed bij mij, als ik namelijk toch naar die pagina zonder in te loggen krijg ik deze errors:
Code (php)
1
2
3
2
3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/gamereac/public_html/uploads/test/secure_page.php:2) in /home/gamereac/public_html/uploads/test/authenticatie.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /home/gamereac/public_html/uploads/test/secure_page.php:2) in /home/gamereac/public_html/uploads/test/authenticatie.php on line 11
Warning: Cannot modify header information - headers already sent by (output started at /home/gamereac/public_html/uploads/test/secure_page.php:2) in /home/gamereac/public_html/uploads/test/authenticatie.php on line 11
en daaronder krijg ik gewoon de pagina te zien, en ik heb alles gewoon zo overgenomen als in de tut.
m.v.g. zap
Ik maak gebruik van een config file:
en van een opendb:
en van een opendb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
en dit is dan mijn authenticatie.php :
<?php
// de gegevens voor de DB connectie
require 'config/config.php';
require 'config/opendb.php';
// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (3);
header ('Location: http://uploads.gamereactor.biz/test'); // NIET VERGETEN AAN TE PASSEN!!!
}
[/code]
(dit is alleen het bovenste gedeelte van de script)
m.v.g. zap
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
en dit is dan mijn authenticatie.php :
<?php
// de gegevens voor de DB connectie
require 'config/config.php';
require 'config/opendb.php';
// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (3);
header ('Location: http://uploads.gamereactor.biz/test'); // NIET VERGETEN AAN TE PASSEN!!!
}
[/code]
(dit is alleen het bovenste gedeelte van de script)
m.v.g. zap
@ Rene: natuurlijk kun je dat doen. Bij een foutieve combinatie username/password zou je een sessievariabele kunnen zetten, laten we zeggen $_SESSION['error'].
Aan het begin van de inlogpagina wordt de sessie vernietigd. Vlak daarvoor zou je dan moeten checken of $_SESSION['error'] bestaat. Zo ja, dan kopieer je hem in een variabele, zodat je verder op de pagina een melding kunt geven.
Aan het begin van de inlogpagina wordt de sessie vernietigd. Vlak daarvoor zou je dan moeten checken of $_SESSION['error'] bestaat. Zo ja, dan kopieer je hem in een variabele, zodat je verder op de pagina een melding kunt geven.
@ Rene: Clipper, dat is nog eens naam uit het verleden :-)
Ik lees trouwens op WikiPedia dat de taal nog steeds gebruikt wordt.
Ontopic: mooi dat je het aan de praat hebt gekregen en dat je iets aan mijn tut hebt gehad.
Ik lees trouwens op WikiPedia dat de taal nog steeds gebruikt wordt.
Ontopic: mooi dat je het aan de praat hebt gekregen en dat je iets aan mijn tut hebt gehad.
@Jan: Wat oud maar goed is moet je niet weggooien (Clipper dus). Overigens gebruik ik het nu samen met MiniGui, Harbour en Borland C++ compiler. Kun je met een oude taal toch mooi Windows programma's maken. Kijk maar eens op www.plantenkennis.com/download.php en installeer het hier aangeboden programma. (Als je tenminste iets met planten doet).
Overigens: nu wil ik de gebruiker het verschil aangeven als ze helemaal niet ingelogd zijn (dus b.v. als ze de pagina secure_page.php opvragen) en als ze een verkeerde inlognaam hebben ingevuld. Kan dat ook
Overigens: nu wil ik de gebruiker het verschil aangeven als ze helemaal niet ingelogd zijn (dus b.v. als ze de pagina secure_page.php opvragen) en als ze een verkeerde inlognaam hebben ingevuld. Kan dat ook
@ Rene: als ze een verkeerde combi username/password invullen zou je dat op kunnen vangen door de functie check_login als volgt aan te passen:
Op de pagina met het loginformulier zou je dan eerst met isset moeten checken of $_SESSION['error'] gezet is en die in een andere variabele kopieren voordat je session_destroy aanroept. Verderop in de inlogpagina kun je dan weer een boodschap geven aan de user.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
function check_login ($username, $password) {
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
// sessievariabele zitten om op de loginpagina een melding te kunnen geven
$_SESSION['error'] = '<p>Verkeerde username en/of password</p>';
to_login ();
}
}
else {
to_login ();
}
}
?>
function check_login ($username, $password) {
$sql = "
SELECT id
FROM members
WHERE username = '" . $username . "'
AND password = SHA1('" . $password . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
// sessievariabele zitten om op de loginpagina een melding te kunnen geven
$_SESSION['error'] = '<p>Verkeerde username en/of password</p>';
to_login ();
}
}
else {
to_login ();
}
}
?>
Op de pagina met het loginformulier zou je dan eerst met isset moeten checken of $_SESSION['error'] gezet is en die in een andere variabele kopieren voordat je session_destroy aanroept. Verderop in de inlogpagina kun je dan weer een boodschap geven aan de user.
@Jan, ik gebruik zelf eenzelfde principe in mijn loginscripts. En mijn ervaring is dat het goed werkt!
Naar mijn idee denk ik echter iets gevonden te hebben tegen het "stelen van sessies", maar weet niet helemaal zeker of het "waterdicht" is.
Ik sla een sha1 hash van $_SERVER["REMOTE_ADDR"] + session_id() op in de database, en check elke keer bij het laden van de pagina ook of deze waarde nog klopt.
Zo niet, dan laat ik uitloggen.
Is dit mogelijk een aanvulling op jouw script, of levert dit slechts valse hoop op veiligheid?
Naar mijn idee denk ik echter iets gevonden te hebben tegen het "stelen van sessies", maar weet niet helemaal zeker of het "waterdicht" is.
Ik sla een sha1 hash van $_SERVER["REMOTE_ADDR"] + session_id() op in de database, en check elke keer bij het laden van de pagina ook of deze waarde nog klopt.
Zo niet, dan laat ik uitloggen.
Is dit mogelijk een aanvulling op jouw script, of levert dit slechts valse hoop op veiligheid?
@ Rens: op het eerste gezicht kan ik zo niet zeggen of het waterdicht is. Ik zie parallellen met mijn reactie van 21.08.2006 10:14. Wat daar extra gebeurt, is dat de naam van de sessie en de map waar de sessiegegevens bewaard worden, veranderd worden.
Een ip kun je volgens mij spoofen dus dat is niet per definitie veilig. Hoe dat met een session_id zit, zou ik zo uit mijn hoofd niet weten.
Een ip kun je volgens mij spoofen dus dat is niet per definitie veilig. Hoe dat met een session_id zit, zou ik zo uit mijn hoofd niet weten.
Misschien wil iemand mij het volgende uitleggen:
Boven aan het bestand authenticatie.php staat session_start();
Als ik het goed begrepen heb, include je dit bestand voor iedere pagina die je wilt beveiligen.
In de PHP manual staat:
session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.
Dat houdt toch in dat iedere keer dat authenticatie.php wordt aangeroepen er een nieuwe sessie wordt aangemaakt? Terwijl toch de bedoeling is dat je wilt controleren of de betreffende gebruiker en sessie bij elkaar horen?
Of heb ik het nu verkeerd begrepen?
Boven aan het bestand authenticatie.php staat session_start();
Als ik het goed begrepen heb, include je dit bestand voor iedere pagina die je wilt beveiligen.
In de PHP manual staat:
session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.
Dat houdt toch in dat iedere keer dat authenticatie.php wordt aangeroepen er een nieuwe sessie wordt aangemaakt? Terwijl toch de bedoeling is dat je wilt controleren of de betreffende gebruiker en sessie bij elkaar horen?
Of heb ik het nu verkeerd begrepen?
Ik krijg bij het invullen van de inloggegevens de melding "er is een fout opgetreden". Wat kan er in het autorisatiebestand fout zijn ? Overigens ben ik nog maar net bezig met PHP (in include staan mijn databasegegevens). De site is nog niet aktief.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
session_start ();
// de gegevens voor de DB connectie
include ("verbinding.php");
// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (3);
header ('Location: http://www.worldlywise.info/login/'); // NIET VERGETEN AAN TE PASSEN!!!
}
function check_login ($username, $password) {
// query opstellen
// je tabel kan er heel simpel uitzien:
// id INT(11) auto_increment
// username VARCHAR 30.
// password VARCHAR 10. Het password sla je op in je DB met een SHA1 hash
// daarom staat SHA1 dus ook in de query
$sql = "
SELECT Id
FROM ron
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}
// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
session_start ();
// de gegevens voor de DB connectie
include ("verbinding.php");
// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (3);
header ('Location: http://www.worldlywise.info/login/'); // NIET VERGETEN AAN TE PASSEN!!!
}
function check_login ($username, $password) {
// query opstellen
// je tabel kan er heel simpel uitzien:
// id INT(11) auto_increment
// username VARCHAR 30.
// password VARCHAR 10. Het password sla je op in je DB met een SHA1 hash
// daarom staat SHA1 dus ook in de query
$sql = "
SELECT Id
FROM ron
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}
// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
Mooi scriptje.
Maar even een vraagje voor het toepassen ervan.
Als ik bij een administratie pagina een pagina heb die andere pagina's include moet ik dan in zowel de hoofdpagina en in de includes toevoegen voor het geval iemand direct naar de includes wil linken, of kan dit anders opgelost worden?
Maar even een vraagje voor het toepassen ervan.
Als ik bij een administratie pagina een pagina heb die andere pagina's include moet ik dan in zowel de hoofdpagina en in de includes toevoegen voor het geval iemand direct naar de includes wil linken, of kan dit anders opgelost worden?
Ik heb dit script met succes weten toe te passen, alleen wanneer ik vanaf de secured_page naar een volgende secured_page ga via een link(bijvoorbeeld secured_page2.php die precies hetzelfde is als secured_page.php), dan kom ik weer opnieuw op de inlogpagina.
Doe ik wat verkeerd of kan dat gewoon niet?
Doe ik wat verkeerd of kan dat gewoon niet?
Hallo Jan,
Ik ontdek net je tut en reakties... hier kan ik veel van leren!!!
Vraag:
// anti - session hijacking code
ini_set('session.save_path', '/temp');
geeft geen sessions files in de root dir temp. Zie ik iets over het hoofd?
Maar...
Wat heeft het voor nut om de ingestelde sessions dir te wijzigen naar een eigen dir op de server?
Bedankt, Harry
Ik ontdek net je tut en reakties... hier kan ik veel van leren!!!
Vraag:
// anti - session hijacking code
ini_set('session.save_path', '/temp');
geeft geen sessions files in de root dir temp. Zie ik iets over het hoofd?
Maar...
Wat heeft het voor nut om de ingestelde sessions dir te wijzigen naar een eigen dir op de server?
Bedankt, Harry
He Jan,
Heb een paar uur zitten studeren op een auth script uit een boek. Krijg de logica niet tussen de oren en het script niet aan de praat. Toen maar authenticatie.php gezocht op google. Deze tut is erg leerzaam (mede door de "levendige" reacties). Ik zal de veren maar achterwegen laten...
Zag in mijn tmp map dat er een sessie bestand van 17kb werd gemaakt en 1 met de daadwerkelijke inloggegevens. Iemand een idee wat je met de data in dit eerste bestand kunt?
Manuel
Heb een paar uur zitten studeren op een auth script uit een boek. Krijg de logica niet tussen de oren en het script niet aan de praat. Toen maar authenticatie.php gezocht op google. Deze tut is erg leerzaam (mede door de "levendige" reacties). Ik zal de veren maar achterwegen laten...
Zag in mijn tmp map dat er een sessie bestand van 17kb werd gemaakt en 1 met de daadwerkelijke inloggegevens. Iemand een idee wat je met de data in dit eerste bestand kunt?
Manuel
sorry voor eht bericht op een oude tutorial maar ik stuit op een probleem
ik gebruik de zelfde toepassing als Jan ook doet dus precies het zelfde
maar hij haalt sessie's door elkaar denk ik
als ik ingelogd ben en iemand anders logt in komt die op mijn account
het is exact hetzelfde behalve wat er gebeurt na het inloggen
ik laat hierna een query uitvoeren met het ID uit de session
weet iemand het probleem of zou mij kunnen helpen
mvg
Chango911
ik gebruik de zelfde toepassing als Jan ook doet dus precies het zelfde
maar hij haalt sessie's door elkaar denk ik
als ik ingelogd ben en iemand anders logt in komt die op mijn account
het is exact hetzelfde behalve wat er gebeurt na het inloggen
ik laat hierna een query uitvoeren met het ID uit de session
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$id2 = $_SESSION['id'];
$query2 = mysql_query("SELECT * FROM members WHERE id='$id2'");
while ($row2 = mysql_fetch_assoc($query2))
{
$id = $row2['id'];
$email = $row2['email'];
$ras = $row2['type'];
$level = $row2['level'];
}
?>
$id2 = $_SESSION['id'];
$query2 = mysql_query("SELECT * FROM members WHERE id='$id2'");
while ($row2 = mysql_fetch_assoc($query2))
{
$id = $row2['id'];
$email = $row2['email'];
$ras = $row2['type'];
$level = $row2['level'];
}
?>
weet iemand het probleem of zou mij kunnen helpen
mvg
Chango911
Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Wouter\Bureaublad\wamp\www\Loginscripts\db_config.php:8) in C:\Documents and Settings\Wouter\Bureaublad\wamp\www\Loginscripts\authenticatie.php on line 10
Iemand die me kan helpen -> ik kan ook inloggen zonder gegevens :)
Iemand die me kan helpen -> ik kan ook inloggen zonder gegevens :)
Hierbij nog een reactie, misschien wat laat maargoed
Citaat: "Gebruik geen cookies"
Ik vindt dit onzin, cookies kunnen net zo veilig zijn als sessies. Je moet bij zowel cookies als sessies goed opletten wat je doet. Nooit gevoelige informatie opslaan op de computer van de bezoeker, denk hierbij aan gebruikersnamen en eventueel gecodeerde wachtwoorden.
Een voorbeeldje van hoe ik het opbouw:
- De inlogprocedure is beveiligd, dit betekend dat elke inlogpoging gelogd wordt. Na 3x foutief inloggen wordt de inlogfunctie voor 15 minuten geblokkeerd.
- Als de inlogpoging gelukt is dan begin ik met een code te genereren van 50 tekens lang met [a-z][A-Z][0-9]. Die sla ik op in de database, samen met het IP, de host en de useragent. Daarna sla ik de code op in een sessie of cookie. Omdat ik alles in de database opsla is session / cookie hijacking vrijwel onmogelijk.
- Daarna wordt bij elk bezoek de code geupdate in de database en de cookie / sessie.
Dus "Gebruik geen cookies" lijkt mij onzin.
Citaat: "Gebruik geen cookies"
Ik vindt dit onzin, cookies kunnen net zo veilig zijn als sessies. Je moet bij zowel cookies als sessies goed opletten wat je doet. Nooit gevoelige informatie opslaan op de computer van de bezoeker, denk hierbij aan gebruikersnamen en eventueel gecodeerde wachtwoorden.
Een voorbeeldje van hoe ik het opbouw:
- De inlogprocedure is beveiligd, dit betekend dat elke inlogpoging gelogd wordt. Na 3x foutief inloggen wordt de inlogfunctie voor 15 minuten geblokkeerd.
- Als de inlogpoging gelukt is dan begin ik met een code te genereren van 50 tekens lang met [a-z][A-Z][0-9]. Die sla ik op in de database, samen met het IP, de host en de useragent. Daarna sla ik de code op in een sessie of cookie. Omdat ik alles in de database opsla is session / cookie hijacking vrijwel onmogelijk.
- Daarna wordt bij elk bezoek de code geupdate in de database en de cookie / sessie.
Dus "Gebruik geen cookies" lijkt mij onzin.
he leuk scriptje maar het werkt niet zoals het moet werken bij mij want ik kan met een foutje wachtwoord/username gewoon door naar de beveiligde pagina en als ik uit log kan ik gewoon weer naar de pagina toe zonder weer op nieuw in te loggen ik heb prcs de code van de tut over genomen iemand eenig idee ?
Wat is nu precies de oplossing van deze melding, die ik al een paar keer hier heb voorbij zien komen?
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/xxx/domains/xxx.nl/public_html/test/login/db_config.php:8) in /usr/home/xxx/domains/xxx.nl/public_html/test/login/authenticatie.php on line 10
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/xxx/domains/xxx.nl/public_html/test/login/db_config.php:8) in /usr/home/xxx/domains/xxx.nl/public_html/test/login/authenticatie.php on line 10
Dat snap ik even niet, ik heb het bestand rechtstreeks overgenomen van de tutorial, dus de index.php en niets veranderd.
Zit het dan hier in? Zo ja kun je dat toelichten want ik begrijp niet wat encoding inhoudt.
Zit het dan hier in? Zo ja kun je dat toelichten want ik begrijp niet wat encoding inhoudt.
Quote:
Wanneer je de error krijgt en werkelijk niets voor de functie hebt staan, dan kan dit liggen aan de encoding van je bestand. Copy/paste je code in kladblok (notepad), sla het bestand op en upload het. Wat je ook kan doen is in je texteditor bij encoding (conversion in ultraedit waar dit zich wel eens voordoet) UTF-8 to ASCI te kiezen. Hiermee los je het probleem ook op.
Als ik als user1 inlog en van een beveiligde pagina naar een twede beveiligde pagina ga, ben ik ineens ingelogd als user2... of andersom dan...
Zal niet aan het script liggen maar aan mij want ik heb hetzelde probleem met andere login scripts ook al gehad... (of ik ze nou aanpas of 1:1 overneem). Ik weet het niet meer..... iemand anders wel ?? Please !!
Zal niet aan het script liggen maar aan mij want ik heb hetzelde probleem met andere login scripts ook al gehad... (of ik ze nou aanpas of 1:1 overneem). Ik weet het niet meer..... iemand anders wel ?? Please !!
Daar kan het wat mij betreft niet aan liggen, dat had ik al veranderd...
Code (php)
Het is een kortere manier om dit te doen:
Binnen een if hoeft niet speciaal een voorwaarde met >, <, != of == te staan. Alles wat false of true oplevert kun je in een if zetten. Dit mag bijvoorbeeld ook:
Bovenstaande code zal zo niet letterlijk voorkomen natuurlijk, maar is om het duidelijk te maken. Een functie die false of true retourneert mag je ook in een if zetten.
Binnen een if hoeft niet speciaal een voorwaarde met >, <, != of == te staan. Alles wat false of true oplevert kun je in een if zetten. Dit mag bijvoorbeeld ook:
Bovenstaande code zal zo niet letterlijk voorkomen natuurlijk, maar is om het duidelijk te maken. Een functie die false of true retourneert mag je ook in een if zetten.
Aller eerst hartstikke bedankt voor deze tut. hij werkt fantastisch.
Waarschijnlijk een hele late reactie, maar vroeg het met toch af.
Ik gebruik je script met veel plezier, alleen heb ik een vraag.
Op mijn site wil ik dit systeem gebruiken om via 1 page voor iedereen in te loggen. Maar dat wel elke persoon naar een andere pagina word gestuurd.
Klein voorbeeld:
----------------------------------------
| id | username | password | site |
-----------------------------------------
| 1 | user1 | pass1 | site1 |
-----------------------------------------
| 2 | user2 | pass2 | site 2|
-----------------------------------------
Als ik dus als User1 inlog dat ik op site1 kom en met user2 op site2.
Is deze mogelijkheid er?
Ben zelf aardige leek met mysql en php verwerkingen.
Alvast hartelijk bedankt.
mvg, Ditmar
Waarschijnlijk een hele late reactie, maar vroeg het met toch af.
Ik gebruik je script met veel plezier, alleen heb ik een vraag.
Op mijn site wil ik dit systeem gebruiken om via 1 page voor iedereen in te loggen. Maar dat wel elke persoon naar een andere pagina word gestuurd.
Klein voorbeeld:
----------------------------------------
| id | username | password | site |
-----------------------------------------
| 1 | user1 | pass1 | site1 |
-----------------------------------------
| 2 | user2 | pass2 | site 2|
-----------------------------------------
Als ik dus als User1 inlog dat ik op site1 kom en met user2 op site2.
Is deze mogelijkheid er?
Ben zelf aardige leek met mysql en php verwerkingen.
Alvast hartelijk bedankt.
mvg, Ditmar
De reden hiertoe is dat ik voor mensen bij mij op de opleiding portfolio's online laat zetten.
Maar omdat we onderling onze werken eigenlijk niet willen delen behalve bij het laten zien aan de leraren zocht ik naar een login pagina die dan vanuit daar de juiste user naar zijn of haar subdomein als portfolio stuurt om daar bijv. te oploaden of zijn werk te laten zien.
mvg, Dimtar
Maar omdat we onderling onze werken eigenlijk niet willen delen behalve bij het laten zien aan de leraren zocht ik naar een login pagina die dan vanuit daar de juiste user naar zijn of haar subdomein als portfolio stuurt om daar bijv. te oploaden of zijn werk te laten zien.
mvg, Dimtar
Okee, maar standaard werken sessions niet op subdomains. Daarvoor moet je even deze pagina lezen:
http://www.madcarrot.co.uk/2005/08/pass_sessions_b.html
Bovendien vraag ik me wel af of dit veilig is. Als ik het subdomein van iemand anders in de adresbalk intik, zit ik er gewoon in volgens mij.
Ik denk dat je beter het user id in de sessie kunt zetten en vervolgens alleen maar dingen uit je db laten rollen die aan dit user id gekoppeld zijn.
http://www.madcarrot.co.uk/2005/08/pass_sessions_b.html
Bovendien vraag ik me wel af of dit veilig is. Als ik het subdomein van iemand anders in de adresbalk intik, zit ik er gewoon in volgens mij.
Ik denk dat je beter het user id in de sessie kunt zetten en vervolgens alleen maar dingen uit je db laten rollen die aan dit user id gekoppeld zijn.
Er ontgaat mij iets.
Ik kan nu op 'login.php' inloggen met elke willekeurige gebruikersnaam en wachtwoord die ik maar invoer, niet alleen met de gebruikersnamen en wachtwoorden in de tabel 'members'.
Dus ook als ik als gebruikersnaam 'dssd' invul en als wachtwoord 'sdsdfa' kom ik op secure_page.php, met bovenaan de 'headers already sent'-mededeling en daaronder de mededeling dat ik succesvol ben ingelogd. Dit is uiteraard niet de bedoeling. Wat mis ik hier?
Ik kan nu op 'login.php' inloggen met elke willekeurige gebruikersnaam en wachtwoord die ik maar invoer, niet alleen met de gebruikersnamen en wachtwoorden in de tabel 'members'.
Dus ook als ik als gebruikersnaam 'dssd' invul en als wachtwoord 'sdsdfa' kom ik op secure_page.php, met bovenaan de 'headers already sent'-mededeling en daaronder de mededeling dat ik succesvol ben ingelogd. Dit is uiteraard niet de bedoeling. Wat mis ik hier?
Voor de inlog en authenticatie heb ik hetzelfde gebruikt als in de tutorial beschreven staat. Voor het config bestand heb ik een stukje script gebruikt uit de reacties.
ik heb een database aangemaakt en de gegevens, zoals in het commentaar in het authenticatie bestand staat aangegeven, ingevoerd.
Ik heb contact opgenomen met de host en gevraagd waar mysql.sock staat. Maar zij zijn erg traag in het beantwoorden van vragen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$dbhost = 'localhost';
$dbuser = 'x';
$dbpass = 'x';
$dbname = 'members';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
$dbhost = 'localhost';
$dbuser = 'x';
$dbpass = 'x';
$dbname = 'members';
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die ("<b>UNABLE CONNECTING TO THE DATABASE SERVER, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
mysql_select_db($dbname, $db) or die ("<b>UNABLE SELECTING THE DATABASE, THE FOLLOWING ERROR WAS RETURNED:</b><br><br>".mysql_error());
unset($dbhost);
unset($dbuser);
unset($dbpass);
unset($dbname);
?>
ik heb een database aangemaakt en de gegevens, zoals in het commentaar in het authenticatie bestand staat aangegeven, ingevoerd.
Ik heb contact opgenomen met de host en gevraagd waar mysql.sock staat. Maar zij zijn erg traag in het beantwoorden van vragen.
Het is ondertussen gelukt, ze hebben me verteld dat ik het ip adres van de server i.p.v. 'localhost' moest gebruiken. Nu heb ik nog steeds een aantal fouten waar ik niet uitkom.
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 7
en ik kan inloggen zonder gegevens in te voeren.
Ik heb gelezen dat 'session_start()' iets verstuurd naar de browser, ik heb nog niets kunnen vinden om dit op te lossen, of beter gezegd: de gevonden oplossingen hiervoor werkten niet.
Ik had in Crimson Editor de 'encoding type' op UTF-8 gezet. Dacht dat dit zou werken, maar helaas. Nu heb ik het via kladblok gedaan, en werkt perfect!
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/web/snl263260/test/addnews.php:1) in /usr/home/web/snl263260/test/authenticatie.php on line 7
en ik kan inloggen zonder gegevens in te voeren.
Ik heb gelezen dat 'session_start()' iets verstuurd naar de browser, ik heb nog niets kunnen vinden om dit op te lossen, of beter gezegd: de gevonden oplossingen hiervoor werkten niet.
Ik had in Crimson Editor de 'encoding type' op UTF-8 gezet. Dacht dat dit zou werken, maar helaas. Nu heb ik het via kladblok gedaan, en werkt perfect!
ik heb alles proberen te lezen en te volgen, maar miss stel ik toch een dubbele vraag. (Mijn excuses hiervoor ,maar door concentratie problemen kom ik er soms niet uit)
een vraag die ik heb is:
Als ik dit script zou gebruiken, waar kan ik dan zien wie er is ingelogd. in de zin van. In de database bewaar ik namelijk gegevens die ik wil gebruiken bij functies in beschermde omgeving, maar dan moet ik dus altijd dus kunnen zien welke gebruiker er precies is ingelogd.
Wie zou mij opweg kunnen helpen?
een vraag die ik heb is:
Als ik dit script zou gebruiken, waar kan ik dan zien wie er is ingelogd. in de zin van. In de database bewaar ik namelijk gegevens die ik wil gebruiken bij functies in beschermde omgeving, maar dan moet ik dus altijd dus kunnen zien welke gebruiker er precies is ingelogd.
Wie zou mij opweg kunnen helpen?
Wat je zou kunnen doen als ze inloggen de sessie's naar de database schrijven. met bijvoorbeeld een begin tijd: en een eindtijd. Bij inloggen vul je begin tijd en bij uitloggen de eindtijd. Degene die de eindtijd nog niet heeft gevuld is ingelogd. Wat wel het probleem is, als hij niet op de uitlog button klik maar de browser sluit, is hij voor altijd online.
maar kan ik niet ook sessieid toevoegen aan database.. en dan bij uitloggen of verlaten browser een script uit te laten voeren dat sessieid weer wordt gewist (Mijn IngBank gebruikt ook zoiets bij telebanking bij uitloggen opend er een venster die nodige dingen opruimd en afsluit).
Ik weet niet of er iets is als een live check 'sessieid is afgesloten' en dan gewoon sessieid veld leeg maken in members database?
Ik weet niet of er iets is als een live check 'sessieid is afgesloten' en dan gewoon sessieid veld leeg maken in members database?
lees ik net zit er geen uitlog module in., hoe krijg je dat gefixed.
Ik d8 gebruik deze tut en bouw m later uit. Maar ik snap er soms echt niks meer van. pff.. nu nog vanuit een andere loginsysteem bouwen is miss best lastig. Is er nergens een geheel basis werkende loginsysteem database gestuurd waarin de basis werkt en grotendeels veilig is? (miss had ik dit betr niet kunne vragen (A))
Ik d8 gebruik deze tut en bouw m later uit. Maar ik snap er soms echt niks meer van. pff.. nu nog vanuit een andere loginsysteem bouwen is miss best lastig. Is er nergens een geheel basis werkende loginsysteem database gestuurd waarin de basis werkt en grotendeels veilig is? (miss had ik dit betr niet kunne vragen (A))
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu