| Schrijver |
Bericht |
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 24 Mei 2008 15:01 · Aangepast door: vlerknozem
Inlogsysteem voor meerdere gebruikers.
Regelmatig op het forum wordt er gevraagd naar een inlogsysteem. Daarom heb ik dit kleine artikeltje gemaakt. Bij dit artikel probeer ik zo goed mogelijk uit te leggen hoe mijn code in elkaar steekt, zodat er voor iedereen te begrijpen valt.
Let op, een betere versie vind je hier:
http://www.html-site.nl/forum/24_20196_0.html
Voorkennis
Een voorkennis van hetvolgende is handig:
- PHP & MySQL
- phpMyAdmin
- HTML
1. De database
We gaan gebruik maken van MySQL. MySQL is een database die veel gebruikt wordt in combinatie met php. Om MySQL te beheren maak je gebruik van phpMyAdmin, dat op je host staat geinstalleerd, mits je php & mysql hebt op je host.
In de database willen we een aantal gegevens opslaan. De gebruikersnamen, en de bijbehorende wachtwoorden. Ook gaan we een tabel maken met de de sessie van de ingelogde gebruiker. Maak dus een tabel aan genaamd `gebruikers` met de velden `gebruikersnaam` en `wachtwoord`. Deze krijgen een VARCHAR en bijvoorbeeld beide 54 als grote. Vul in deze velden je gebruikersnaam en wachtwoord in. Wachtwoord eventueel als md5string. Daar kom ik later op terug.
Dan maak je een tabel genaamd `logins`, met de velden `gebruikersnaam`, `sid`, `ip`. `datum`. De datum krijgt als type 'datetime'.
Voor de luie mensen, plaats ik hier nog even de SQL.
sql codeCREATE TABLE `gebruikers` (
`gebruikersnaam` VARCHAR( 54 ) NOT NULL ,
`wachtwoord` VARCHAR( 54 ) NOT NULL
) ENGINE = MYISAM ;
CREATE TABLE `logins` (
`gebruikersnaam` VARCHAR( 54 ) NOT NULL ,
`sid` VARCHAR( 256 ) NOT NULL ,
`ip` VARCHAR( 256 ) NOT NULL ,
`datum` DATETIME NOT NULL
) ENGINE = MYISAM ;
2. Het configuratiebestand
In het configuratie bestand gaan we de verbinding maken met je database. Dit bestand noemen wij `config.php`.
php code<?php
// Een beveiliging om te voorkomen dat men je config.php probeert te openen.
if(basename($_SERVER['PHP_SELF']) == "config.php") {
header("location: index.php");
}
//Database gegevens
$cfg = array(); // Een array aanmaken
$cfg['host'] = 'localhost'; // Meestal localhost
$cfg['user'] = 'jouw_gebruikers_naam'; // gebruikersnaam
$cfg['pass'] = 'jouw_passwoord'; // Paswoord database
$cfg['datb'] = 'inlog'; // Database naam
$cfg['uren'] = 24; // Aantal uren ingelogd
$sys['ipad'] = IP(); // Ip adres opvragen uit onze functie (in headers.php)
// maak verbinding met de database, als het niet lukt breek het af
$verbinding = mysql_connect($cfg['host'], $cfg['user'], $cfg['pass']) or die(mysql_error());
mysql_select_db($cfg['datb'], $verbinding) or die (mysql_error());
?>
3. Het login scherm.
Natuurlijk is er een scherm nodig waar men zich kan inloggen. Deze zetten we ook in een apart bestand, en kunnen we later makkelijk includen.
We noemen dit bestand 'login.inc.php'. Let op dat ik geen goede html opbouw. Dit zal je zelf moeten doen.
html code<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
Gebruikersnaam: <input type="text" name="gebruikersnaam" /><br />
Wachtwoord: <input type="password" name="wachtwoord" /><br />
<input type="submit" value="login" />
</form>
4. Het header bestand
We gaan een header bestand maken. Deze controleert of de gebruiker is ingelogd. Zo niet dan komt er een inlogscherm, zowel dan wordt de content van `index.php` weergeven. Dit bestand noemen we 'header.php'
php code<?php
// Een beveiliging om te voorkomen dat men je header.php probeert te openen.
if(basename($_SERVER['PHP_SELF']) == "header.php") {
header("location: index.php");
}
// Met deze functie controleren we het ip adres.
function IP() {
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
$realip = getenv( 'HTTP_CLIENT_IP' );
} else {
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}
// Het configuratiebestand include
include_once('config.php');
// Controleren op postverzoek
if($_SERVER['REQUEST_METHOD'] == "POST") {
// Iemand heeft de submit ingedrukt
// We gebruiken mysql_real_escape_string() om te voorkomen dat met met quotes problemen gaat veroorzaken.
$usr = mysql_real_escape_string($_POST['gebruikersnaam']);
$pas = mysql_real_escape_string($_POST['wachtwoord']); // of: md5(mysql_real_escape_string($_POST['wachtwoord']));
$sid = md5(rand(0,99999999999)); // Sessie id maken
// Controleren op geldigheid
// Hier selecteren we de gebruikersnaam en wachtwoord ui de tabel 'gebruikers'.
$q1 = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '". $usr ."' AND wachtwoord = '". $pas ."'");
// Even kijken of er resultaten aanwezig zijn
if(mysql_num_rows($q1)) {
// Gegevens komen overeen
$secondes = $cfg['uren'] * 3600; // uren omzetten in secondes
setcookie("sid", $sid, time()+$secondes, "/"); // Cookie maken
// Een query die de gegevens invoert in de database.
mysql_query("INSERT INTO logins (gebruikersnaam,sid,ip,datum) VALUES ('". $usr ."', '". $sid ."', '". $sys['ipad'] ."', NOW())") or die("Error: kon niet inloggen.");
// Een redirect naar dezelfde url. Gebruiker is nu ingelogd
header("Location: ".$_SERVER['REQUEST_URI']);
} else {
echo "Uw gebruikersnaam of wachtwoord is incorrect.";
}
}
// Controleren op een cookie
if(isset($_COOKIE['sid']) && !empty($_COOKIE['sid'])) {
// Er is een niet-lege cookie
$sid = mysql_real_escape_string($_COOKIE['sid']);
// Controleren of de tijdelijke sleutel aanwezig is in de database, en overeen komt met het ip
$q2 = mysql_query("SELECT * FROM logins WHERE sid = '". $sid ."' AND ip = '". $sys['ipad'] ."'") or die("Er is een fout opgetreden.");
// Controleren op resultaat
if(!mysql_num_rows($q2)) {
// Niet ingelogd, inlogscherm weergeven
include("login.inc.php");
// Zorgen dat de rest van de content niet wordt doorgeven
exit;
} else {
// Het gedeelte om uit te loggen.
if(isset($_GET['actie']) && $_GET['actie'] == "uitloggen") {
// index.php?actie=uitloggen
// Verwijder sessie
mysql_query("DELETE FROM logins WHERE sid = '". $sid ."' AND ip = '". $sys['ipad'] ."'") or die("Er is een fout opgetreden.");
// verwijder cookie
setcookie("sid", $sid, time()-$secondes, "/");
// Redirect
$url = str_replace("actie=uitloggen", "", $_SERVER['REQUEST_URI']); // haal de actie weg
header("Location: ".$url);
}
// De gebruiker is ingelogd.... Dus dit stuk is beveiligd.
}
} else {
// Geen login sessie, inlogscherm weergeven
include("login.inc.php");
exit;
}
?>
5. De beveiligde pagina's
Nu moet je alle beveiligde pagina voorzien van het volgende:
php code<?php
include_once('header.php');
?>
<a href="index.php?actie=uitloggen">Uitloggen</a><br />
Hier komt dan de rest van je mooie (of niet:P) html pagina.
6. Wachtwoord coderen
Het is beter om je wachtwoorden te coderen. Met de md5 functie kan je dit doen. Sla je wachtwoorden daarom op als md5 in je database. Doe dit door een bestandje te maken:
php code<?php
echo md5("Jouwwachtwoord");
?>
Bekijk het bestand, voer de string in je database voor je wachtwoord en verwijder je bestand.
Bij onderdeel 3 in het header bestand moet je $pas even vervangen door het stukje dat in het commentaar staat.
Deel twee is in mijn volgende post...
|
| |
|
wadelft Forum Lid
2720 posts |
# Geplaatst: 24 Mei 2008 15:19 · Aangepast door: wadelft
@Vlerk : prima , maar je zegt : 90% is beginner.
Loopt die niet direkt bij punt 1 al vast ?? Database ???
Weet die veel dat je mysql bedoelt (o niet ?) en hoe kom hieraan / vind je die ??
Het zal tever gaan om dat te beshrijven maar mss een linkje
naar een tut over het gebruik van mysql ???
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 24 Mei 2008 16:15 · Aangepast door: vlerknozem
Ik heb er wat meer uitleg over gegeven. Ik vond zo snel geen goede nederlandse uitleg voor het gebruik van phpMyAdmin. Als iemand nog een goede weet, dan edit ik wel een linkje erin. Of een van ons moet ook
hierover een artikel schrijven.
Hieronder ga ik verder met deel twee...
------------------------------
7. Functie voor controlle login-sessie
Soms wil je een bepaald onderdeel van de site anders hebben wanneer de gebruiker is ingelogd, ipv dat de hele pagina wordt vervangen door een login-formulier wanneer men niet is ingelogd. Ik maak nu een simpele functie, die je aan je header bestand
kan toevoegen. Hiermee kan je ook een gebruikersnaam opvragen. Hiervoor gebruik ik een deel van de code die ik eerder gebruikt heb.
php code<?php
function logininfo($getinfo=false) {
if(isset($_COOKIE['sid']) && !empty($_COOKIE['sid'])) {
// Er is een niet-lege cookie
$sid = mysql_real_escape_string($_COOKIE['sid']);
// Controleren of de tijdelijke sleutel aanwezig is in de database, en overeen komt met het ip
$q2 = mysql_query("SELECT * FROM logins WHERE sid = '". $sid ."' AND ip = '". $sys['ipad'] ."'") or die("Er is een fout opgetreden.");
// Controleren op resultaat
if(!mysql_num_rows($q2)) {
// Niet ingelogd
return false;
} else {
$info = mysql_fetch_array($q2);
if($getinfo && isset($info[$getinfo])) {
return $info[$getinfo];
} elseif($getinfo===True) {
return $info;
} else {
return true;
}
}
}
}
?>
Nu maak ik een simpele voorbeeldpagina:
php code<?php
include('header.php');
?>
<html>
<head>
<title>Test pagina</title>
</head>
<body>
Dit is een voorbeeld pagina. Iedereen
Hieronder komt een login menu:<br />
<?php
if(!logininfo()) {
// Niet ingelogd, login deel weergeven
include('login.inc.php');
} else {
?>
Welkom <b><?php echo logininfo('gebruikersnaam');?>!</b><br />
<a href="index.php?actie=uitloggen">Uitloggen</a>
}
?>
</body>
</html>
Nu hebben we nog twee problemen. Ten eerste hebben we nu in feite dubbele code, niet zo erg, maar het kan korter. Ten tweede
zullen we nu nooit de site zien met het loginformulier, slechts alleen het login formulier. Dus we gaan de code aanpassen. Header.php wordt nu zo:
php code<?php
// Een beveiliging om te voorkomen dat men in je header.php probeert te openen.
if(basename($_SERVER['PHP_SELF']) == "header.php") {
header("location: index.php");
}
// Met deze functie controleren we het ip adres.
function IP() {
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
$realip = getenv( 'HTTP_CLIENT_IP' );
} else {
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}
function logininfo($getinfo=false) {
if(isset($_COOKIE['sid']) && !empty($_COOKIE['sid'])) {
// Er is een niet-lege cookie
$sid = mysql_real_escape_string($_COOKIE['sid']);
// Controleren of de tijdelijke sleutel aanwezig is in de database, en overeen komt met het ip
$q2 = mysql_query("SELECT * FROM logins WHERE sid = '". $sid ."' AND ip = '". $sys['ipad'] ."'") or die("Er is een fout opgetreden.");
// Controleren op resultaat
if(!mysql_num_rows($q2)) {
// Niet ingelogd
return false;
} else {
$info = mysql_fetch_array($q2);
if($getinfo && isset($info[$getinfo])) {
return $info[$getinfo];
} elseif($getinfo===True) {
return $info;
} else {
return true;
}
}
}
}
// Het configuratiebestand include
include_once('config.php');
// Controleren op postverzoek
if($_SERVER['REQUEST_METHOD'] == "POST") {
// Iemand heeft de submit ingedrukt
// We gebruiken mysql_real_escape_string() om te voorkomen dat met met quotes problemen gaat veroorzaken.
$usr = mysql_real_escape_string($_POST['gebruikersnaam']);
$pas = mysql_real_escape_string($_POST['wachtwoord']); // of: md5(mysql_real_escape_string($_POST['wachtwoord']));
$sid = md5(rand(0,99999999999)); // Sessie id maken
// Controleren op geldigheid
// Hier selecteren we de gebruikersnaam en wachtwoord ui de tabel 'gebruikers'.
$q1 = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '". $usr ."' AND wachtwoord = '". $pas ."'");
// Even kijken of er resultaten aanwezig zijn
if(mysql_num_rows($q1)) {
// Gegevens komen overeen
$secondes = $cfg['uren'] * 3600; // uren omzetten in secondes
setcookie("sid", $sid, time()+$secondes, "/"); // Cookie maken
// Een query die de gegevens invoert in de database.
mysql_query("INSERT INTO logins (gebruikersnaam,sid,ip,datum) VALUES ('". $usr ."', '". $sid ."', '". $sys['ipad'] ."', NOW())") or die("Error: kon niet inloggen.");
// Een redirect naar dezelfde url. Gebruiker is nu ingelogd
header("Location: ".$_SERVER['REQUEST_URI']);
} else {
echo "Uw gebruikersnaam of wachtwoord is incorrect.";
}
}
// Uitloggen
if(logininfo() && isset($_GET['actie']) && $_GET['actie'] == "uitloggen") {
// index.php?actie=uitloggen
// Verwijder sessie
mysql_query("DELETE FROM logins WHERE sid = '". $sid ."' AND ip = '". $sys['ipad'] ."'") or die("Er is een fout opgetreden.");
// verwijder cookie
setcookie("sid", $sid, time()-$secondes, "/");
// Redirect
$url = str_replace("actie=uitloggen", "", $_SERVER['REQUEST_URI']); // haal de actie weg
header("Location: ".$url);
}
?>
Succes!
Laatst bewerkt op za 03 augustus 2009 om 15:56 (let op, laatste update is nog niet getest)
|
tvanbeek Forum Lid
450 posts |
# Geplaatst: 25 Mei 2008 13:34 · Aangepast door: tvanbeek
het lijkt me slim om ook het config bestand te beveiligen.
dus zet config.php buiten je live directorty.
Je map structuur wordt dan zoiets:
/jou_server/
-/www/
--/inculdes/
---config.php
--/htdocs/
---index.php
Als je dan je config bestand in index.php wilt includen dan doe je dat zo:
include_once('../config.php'); //de "../" staat voor 'een directory lager'
Voila
Groeten Thijs
|
loran Forum Lid
1 posts |
# Geplaatst: 31 Mei 2008 23:00
volgens mij is dat een vrij oude versie van phpmadmin ik kom niet verder dan dat je data hebt aangemaakt
|
fangore Forum Lid
165 posts |
# Geplaatst: 27 Sep 2008 22:50
Info over database:
meestal is dit phpmyadmin, welke je kan vinden in het controle paneel van je website. In dit controle paneel klik je op database (beheren , aanmaken ) afhankelijk van de software die je host gebruikt.
meer info over je database kan je vinden op:
http://www.phpmyadmin.net/home_page/index.php
|
diabolo Forum Lid
1092 posts |
# Geplaatst: 27 Sep 2008 22:57
(dit is tog een soort tutorial..., dan moet hij toch in het nieuwe fora...??)
|
bnbnnl Forum Lid
693 posts |
# Geplaatst: 28 Sep 2008 00:22
Neuh dat is alleen videotutorial. Goede info overigens.
|
pinopokie Forum Lid
3 posts |
# Geplaatst: 30 Okt 2008 11:17 · Aangepast door: pinopokie
oeh een paar vragen hierover.
Ik vindt dit een nice voorbeeld van een inlog systeem, echter vroeg ik mij af:
-hoe implementeer ik dit? Ik heb de bestanden aangemaakt, de database ook, ik heb connectie, maar mijn index.php is gewoon een blank.
- Ik test dit echter wel lokaal gewoon met localhost dit hoord toch gewoon te werken? (vroeg me dit af aangezien er cookies aangemaakt worden enzo)
- ow en is het met deze code mogelijk het inlog scherm op een willekeurige plek te zetten?
Dit voorbeeld heeft me erg geholpen met het ontwikkelen van een idee voor een inlog systeem en ik zou graag op basis hiervan verder willen bouwen.
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 30 Okt 2008 13:21
Quoting: pinopokie -hoe implementeer ik dit? Ik heb de bestanden aangemaakt, de database ook, ik heb connectie, maar mijn index.php is gewoon een blank.
Je ziet geen inlogscherm? Misschien zit er een fout in de code, hoewel dat me sterk lijkt. Misschien werkt je php niet of niet goed? Probeer eens de volgende code uit in een leeg .php bestand:
Als dat werkt dan is daar geen probleem mee.
Even geen idee wat het probleem kan zijn anders.
Zet eens in je header.php de volgende regel:
. Als er een fout in de code zit, zou je het daarmee in ieder geval moeten zien.
Quoting: pinopokie - ow en is het met deze code mogelijk het inlog scherm op een willekeurige plek te zetten?
Ja. Regel 34-39 van het header bestand kan je overal neer zetten. Zorg wel dat de form-action klopt.
Quoting: diabolo (dit is tog een soort tutorial..., dan moet hij toch in het nieuwe fora...??)
Ja, maar ik heb dit artikel geschreven voordat het nieuwe fora is gemaakt ;) Maar bij deze verplaats ik het.
|
pinopokie Forum Lid
3 posts |
# Geplaatst: 31 Okt 2008 09:32 · Aangepast door: pinopokie
Geen errors en ik krijg gewoon de php info. Echter vroeg ik mij wel iets af. Er staat letterlijk in de tutorial "Deze controleert of de gebruiker is ingelogd. Zo niet dan komt er een inlogscherm, zowel dan wordt de content van `index.php` weergeven."
Nu is mijn index.php blank :D dus kan het kloppen dat ik niks te zien krijg. Echter lijkt het me niet de bedoeling dat ik automatisch altijd ingelogd sta toch?
Dit is mijn config.php. De waardes die erin staan komen overeen met een user die ik heb aangemaakt in usermanagement van sqlyog (lokale database).
php code<?php
//Database gegevens
$cfg['host'] = 'localhost'; // Meestal localhost
$cfg['user'] = '***'; // gebruikersnaam
$cfg['pass'] = '***'; // Paswoord database
$cfg['datb'] = '***'; // Database naam
$cfg['uren'] = 24; // Aantal uren ingelogd
$sys['ipad'] = $_SERVER['REMOTE_ADDR']; // Ip adres opvragen.
// maak verbinding met de database, als het niet lukt breek het af
$try['connect'] = mysql_connect($cfg['host'], $cfg['user'], $cfg['pass']) or die(mysql_error());
$try['selectd'] = mysql_select_db($cfg['datb'], $try['connect']) or die (mysql_error());
?>
het probleem waar ik een beetje mee zit is denk ik: wanneer ik verkeerde inlog gegevens in config.php zet krijg ik de error: acces denied. En als ik in config.php wel goede gegevens zet ben ik altijd ingelogd (dus error of ingelogd).
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 31 Okt 2008 11:31
Even je inloggegevens uit je bericht verwijderd. Ik heb gezien dat het aan een zeer domme fout lag van mij. Ik heb de code geupdate, en hij werkt nu goed. Ook heb ik even een mogelijkheid erbij gemaakt om uit te loggen.
|
Vestel Forum Lid
626 posts |
# Geplaatst: 31 Okt 2008 13:41
Mooi gemaakt ;-)
proficiat
|
Bastiaanse Forum Lid
198 posts |
# Geplaatst: 7 Dec 2008 16:35
Om eerlijk te zijn vind ik het zo op het eerste gezicht niet zo heel erg simpel, zeker voor een beginner denk ik dat je er best in kunt verdrinken.
En nog twee dingen: is het niet beter om met sessions te werken?
en volgens mij werkt dit ook niet altijd: "$sys['ipad'] = $_SERVER['REMOTE_ADDR']; // Ip adres opvragen."
Zelf gebruik ik hier altijd voor:
php codefunction get_ip(){
if( isset( $_SERVER ['HTTP_X_FORWARDED_FOR'] ) ){
$ip = mysql_real_escape_string($_SERVER ['HTTP_X_FORWARDED_FOR']);
}elseif( isset( $_SERVER ['HTTP_VIA'] ) ){
$ip = mysql_real_escape_string($_SERVER ['HTTP_VIA']);
}elseif( isset( $_SERVER ['REMOTE_ADDR'] ) ){
$ip = mysql_real_escape_string($_SERVER ['REMOTE_ADDR']);
}else{
$ip = 'anonymous' ;
}
return $ip;
}
|
Wilco Forum Lid
1503 posts |
# Geplaatst: 29 Jan 2009 06:28
dit is toch niet simpel, wel het kortste gepro
grammeerd maar simpel? mijn eerste systeem was duizende malen simpeler...
waarom programmeer je met functies? je zou m dan beter zo kunnen programmeren dat je login systeem (go.login.php oid) alle functies zet, en een index.php maakt waarin dat bestandje word geincluded. en dan met ?pagina= ed werken, dan staat er in je index.php:
php code
<?php
include ('go.login.php');
if (isset(login($_COOKIE['cookienaam']))) {
showpage($_GET['pagina']);
} else {
showerror($_COOKIE['cookienaam']);
}
?>
naar mijn ideen veel makkelijker op je index.. en waarom werk je niet met sessies? en is het wel slim om de cookie te "vervangen" ipv te verwijderen?
|
Tijmen Forum Lid
2312 posts |
# Geplaatst: 29 Jan 2009 09:38
Naast dat je taalgebruik onder de maat is, klopt je index.php code niet eens. Een $_GET kun je beinvloeden hé? En dan beginnen de error meldingen.
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 30 Jan 2009 01:50
@Bastiaan:
Je hebt wel gelijk. Alleen de rede waarom ik het in eerste instantie niet had gedaan is omdat het dan nog ingewikkelder maakt.
@Wilco:
Misschien wel beter inderdaad om een include te gebruiken ipv een functie.
Ik werk niet met sessies omdat sessies zwaar irritant zijn en niet goed werken. Ik meen ook dat de cookie verloopt als de tijd voorbij (of in dit geval negatief) is.
Ik zal binnenkort eventueel de tutorial updaten.
|
Wilco Forum Lid
1503 posts |
# Geplaatst: 30 Jan 2009 07:14
Quoting: Tijmen Naast dat je taalgebruik onder de maat is, klopt je index.php code niet eens. Een $_GET kun je beinvloeden hé? En dan beginnen de error meldingen.
jij hebt natuurlijk universiteit gedaan he...
een $_GET kun je simpel weg beveiligen door bovenaan iedere pagina bijvoorbeeld dit te zetten:
php code
<?php
checklogin($_SESSION['USER']);
?>
dan een functie schrijven van checklogin, en als die login niet bestaat simpel weg een redirect naar de login pagina.
voila?
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 30 Jan 2009 11:52
Ik heb de code geupdate, en de topic-titel veranderd.
@Wilco:
Dat is niet wat Tijmen bedoelde. Hij bedoelde dat wanneer je dus bent ingelogd, kan je op die manier heel makkelijk alle pagina's includen die je wilt. Wat als je ?pagina=index.php doet?
|
Wilco Forum Lid
1503 posts |
# Geplaatst: 30 Jan 2009 18:46
Quoting: vlerknozem @Wilco:
Dat is niet wat Tijmen bedoelde. Hij bedoelde dat wanneer je dus bent ingelogd, kan je op die manier heel makkelijk alle pagina's includen die je wilt. Wat als je ?pagina=index.php doet?
als jij daarboven in index.php de functie (die je zelf geschreven hebt) checklogin($_SESSION['user']); zet, dat kun jij met die functie controleren of de gebruiker is ingelogd.
trouwens, je moet met file exist werken om de paginas te include, want je hebt nooit een index.php.php dus dan zegt die al gelijk: pagina bestaat niet.
Je kunt t zelfs opslaan als pagina.234768923489 en dan php codes gebruiken, als je het include werken die codes ook gewoon, en 234768923489 is niet zo gemakkelijk te verzinnen.
|
Tijmen Forum Lid
2312 posts |
# Geplaatst: 30 Jan 2009 22:57
Ten eerste: ik heb geen universiteit gedaan, was ik maar zo ver.
Maar over de code:
Waarom zou je zo moeilijk gaan doen? Je moet gewoon verbieden dat je index.php kan includen, anders krijg je oneindige lus.
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 31 Jan 2009 08:05
Ik doe altijd hetvolgende:
1 map genaamd inc maken.
php code<?php
if(isset($_GET['p'])) {
$pagina = "inc/".basename($_GET['p']);
// Checken met file exists, en includen die hap, anders fout.
}
?>
Door basename() worden dus slashes enzo verwijderd, en krijg je gewoon een mooie bestandsnaam van een pagina die wel of niet bestaat.
|
Wilco Forum Lid
1503 posts |
# Geplaatst: 31 Jan 2009 19:06
Quoting: Tijmen je zelf geschreven hebt) checklogin($_SESSION['user']); zet, dat kun jij met die functie controleren o
ja en dan? je hebt pagina verboden.php en je werkt met ?pagina=
je typt in: http://www.yourhompage.com/?pagina=verboden en voila, je bent er. Zowieso zet ik het liefste (als ik met beveiligde pagina's werk) mn paginas in een database. maar met een simpele checklogin(); functie die jezelf schrijft is het heus niet omslachtig, maar wel veilig. en je hoeft niets te include als alleen config.php.. en dan kan je inderdaad index.php verbieden.
|
Sebastiaan Franken Moderator
3847 posts |
# Geplaatst: 7 Mar 2009 20:58
Quoting: Wilco maar met een simpele checklogin(); functie die jezelf schrijft is het heus niet omslachtig, maar wel veilig. en je hoeft niets te include als alleen config.php.. en dan kan je inderdaad index.php verbieden.
Onze huis-tuin-en keuken hackers houd dit systeem mooi buiten (dat heb ik laten testen) Dus waarom meoilijk doen? Schrijf dan je eigen tutorial!
|
Wilco Forum Lid
1503 posts |
# Geplaatst: 27 Mar 2009 17:39
Quoting: Sebastiaan Franken Onze huis-tuin-en keuken hackers houd dit systeem mooi buiten (dat heb ik laten testen) Dus waarom meoilijk doen? Schrijf dan je eigen tutorial!
Ik mag toch wel iets van kritiek leveren, of moet ik alles maar beamen. Ik zeg toch ook niet dat het een slecht systeem is, het is alleen niet simpel, maar voor een uitgebreidere site is het zeker niet slecht, even over de sessies, je kunt toch eventueel in je functions.php een functie maken die een bepaalde sessie (bijvoorbeeld sessie tijd) controleert, is die sessie tijd meer dan xx aantal uren of minuten dan verwijderd hij vanzelf alles sessies en stuurt je door naar index.php met de foutmelding dat je opnieuw moet inloggen omdat je sessie is verlopen.
cookies zijn leuk, maar ik werk persoonlijk liever met sessies, hoewel ieder natuurlijk zijn manier heeft.
|
Superkluns Forum Lid
736 posts |
# Geplaatst: 25 Apr 2009 12:51 · Aangepast door: Superkluns
Het werkt niet. Als ik naar een beveiligde pagina ga, dan krijg ik dit te zien:
Access denied for user '139829'@'localhost' to database 'inlog'
Er is dus iets mis met mijn config.php maar ik heb geen idee wat.
Wat doe ik fout???
|
vlerknozem Hoofd-moderator
3929 posts |
# Geplaatst: 25 Apr 2009 19:26
@superkluns (grappige naam trouwens :P), zo te zien werkt alles bij jou prima, alleen heb je als gebruiker '139829' geen rechten tot de database 'inlog'. Dus moet je even kijken of je bij $cfg['datb'] wel de juiste database hebt gekozen.
|
Superkluns Forum Lid
736 posts |
# Geplaatst: 26 Apr 2009 12:31 · Aangepast door: Superkluns
idd, ik had de foute database, tnx
EDIT: ik heb nog wel een vraagje: hoe log je uit??
EDIT2: oke, uitloggen heb ik gevonden, maar ik heb nog een vraag. Hoe kan ik ervoor zorgen dat een bepaalde pagina alleen voor een bepaalde gebruiker toegankelijk is??
Stel, ik heb een pagina 'superkluns.php' en de enige die die pagina mag bekijken is de gebruiker 'superkluns'
|
Superkluns Forum Lid
736 posts |
# Geplaatst: 18 Mei 2009 15:42
Ik heb wat ontdekt!
php code// Een beveiliging om te voorkomen dat men je config.php probeert te openen.
if(basename($_SERVER['REQUEST_URI']) == "config.php") {
header("location: index.php");
}
Deze code zou ervoor moeten zorgen dat je deze pagina alleen door de include-functie kunt benaderen. Alleen als je nou in je adres-balk achter 'config.php' dit plakt: '?onzin=la', dan kun je gewoon de pagina openen!
Ik heb geen idee wat voor een voor-/nadelen hier aan zitten, dat je de pagina kan openen, maar het zal wel enig nut hebben, anders dan zou die beveiliging er niet inzitten, toch??
Maar ff kort samengevat: de beveiliging is te omzeilen!! En dat is niet wat ik van een beveiliging verwacht:P:P
|
Marcel vd Weerd Forum Lid
1215 posts |
# Geplaatst: 18 Mei 2009 15:43
Schiet je niks mee op hoor als het goed is. Het zijn variabelen, die kan je niet zo zichtbaar maken lijkt mij.
|