Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Joomla, PHP] Age verification voor index laden

Pagina: 1
Acties:

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Hallo allemaal,

Voor een project ben ik bezig met een website waar men alcohol aanbied en dus moet er een age verification op de website komen. Een vereiste voor de website was Joomla! en daar heb ik dus de volledige website in geschreven.

Nu zijn er genoeg scripts op het internet te vinden over hoe je een age verification kan maken, dit heb ik dus ook gedaan.

Echter heb ik er problemen mee om dit in Joomla! werkend te kunnen krijgen.
Daarom zoek ik een manier om het bestand voor ieder ander bestand te kunnen laden op de website.

Ik heb hier geprobeerd informatie over te vinden op google maar ik kwam geen enkele nuttige website uit.
Ik weet ook niet of zoiets bestaat daarom besloot ik het hier te vragen.

Heeft iemand enig idee waarop ik moet zoeken of wat ik hieraan kan doen?

Bij voorbaat dank!

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Zoals ik al zei, google heb ik al doorgezocht op wat ik wist.
Evenals de de extensions libary van Joomla! waar ik uiteraard begonnen ben hiervoor.

Voor de eerste is bij mijn opdrachtgever geen budget en schijnt weinig flexibiliteit te zijn qua lay-out opties.
Tweede heb ik al geprobeerd, maar is niet wat ik zoek.
Dit scherm enkel enige content af van een artikel, niet de hele website.

Als iemand nog iets weet, hoor ik het graag!

  • Mentalist
  • Registratie: Oktober 2001
  • Laatst online: 18-11 12:59

Mentalist

[avdD]

Voor een project ben ik bezig met een website waar men alcohol aanbied en dus moet er een age verification op de website komen.
Ik weet niet precies wat het plan is, maar ik neem aan dat mensen na bestelling de drank op moeten halen of dat een pakketdienst het spul af gaat leveren. In dat geval zal men gewoon voor aflevering de ID-kaart moeten tonen aangezien het onmogelijk is om online betrouwbaar leeftijd te checken. Enige optie die ik me eventueel zou kunnen bedenken is het vragen om creditcard gegevens (die krijg je niet als je geen 18 bent), maar dat is onwenselijk aangezien niet iedereen die heeft.

Verstuurd vanaf mijn Computer®


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
W3ird_N3rd schreef op zondag 20 januari 2013 @ 20:16:
[...]

Ik weet niet precies wat het plan is, maar ik neem aan dat mensen na bestelling de drank op moeten halen of dat een pakketdienst het spul af gaat leveren. In dat geval zal men gewoon voor aflevering de ID-kaart moeten tonen aangezien het onmogelijk is om online betrouwbaar leeftijd te checken. Enige optie die ik me eventueel zou kunnen bedenken is het vragen om creditcard gegevens (die krijg je niet als je geen 18 bent), maar dat is onwenselijk aangezien niet iedereen die heeft.
Thanks voor je reactie. Maar dit is niet helemaal het concept.
Na wat er in mijn begin post stond begrijp ik wel de verwarring, maar je moet het meer vergelijken met de website van Heineken oid.

Er moet gecontroleerd worden op leeftijd omdat de website inhoud bevat mtb het onderwerp alcohol.
Je kunt op de website zelf niets bestellen hiervan, dit is dus ook helaas geen optie.

  • Mentalist
  • Registratie: Oktober 2001
  • Laatst online: 18-11 12:59

Mentalist

[avdD]

Dan zie ik eigenlijk geen reden waarom je dat voor kinderen af moet schermen. Kinderen hebben daar geen interesse in, dus die komen er niet en als ze er per ongeluk komen klikken ze het zelf wel weg. Pubers vullen gewoon in dat ze geboren zijn in 1900. We zijn allemaal jong geweest niet waar? ;)

Heb je al een oplossing voor de cookiewetgeving? Als je niet-noodzakelijke cookies gebruikt moet je al praktisch de hele site blokkeren zoals bijvoorbeeld Tweakers ook doet. Ik vraag dit omdat je dan slechts een stukje tekst hoeft aan te passen: van "ik accepteer cookies" naar "ik accepteer cookies EN ik ben 18 jaar of ouder". :)

Verstuurd vanaf mijn Computer®


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
W3ird_N3rd schreef op zondag 20 januari 2013 @ 20:26:
Dan zie ik eigenlijk geen reden waarom je dat voor kinderen af moet schermen. Kinderen hebben daar geen interesse in, dus die komen er niet en als ze er per ongeluk komen klikken ze het zelf wel weg. Pubers vullen gewoon in dat ze geboren zijn in 1900. We zijn allemaal jong geweest niet waar? ;)

Heb je al een oplossing voor de cookiewetgeving? Als je niet-noodzakelijke cookies gebruikt moet je al praktisch de hele site blokkeren zoals bijvoorbeeld Tweakers ook doet. Ik vraag dit omdat je dan slechts een stukje tekst hoeft aan te passen: van "ik accepteer cookies" naar "ik accepteer cookies EN ik ben 18 jaar of ouder". :)
Klopt, ik heb het helaas ook niet verzonnen maar het is een vereiste.
Je oplossing voor de cookiewetgeving is in principe een optie. Maar dat kan ook andersom, dat dat hierbij in komt.

Ik ben nu begonnen met een script hiervoor.
Het volgende heb ik gedaan.

Ik heb een bestand aan gemaakt verify.php deze ziet er als volgt uit:
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
<?php
session_start();

if(isset($_POST['submit'])) {
    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];
    
    $birthday = mktime(0,0,0,$month,$day,$year);
    $difference = time() - $birthday;
    $age = floor($difference - 662256000);
    
    if($age >= 18) {
        $_SESSION['over18'] = 1;
        $redirect=isset($_GET['return'])?urldecode($_GET['return']):'./';
        header("location: ".$redirect);
        exit(0);
    } else {
        $_SESSION['under18'] = 0;
        header("location: http://google.com");
        exit(0);
    }
}
?>


En vervolgens heb ik in de index.php van de hoofd template het volgende gezet:
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
<?php
function over18(){ 
    session_start();
    $redirect_url='/verify.php';
    $validated=false; 

    if(!empty($_COOKIE["over18"])) { 
        $validated=true; 
    }

    if(!$validated && isset($_SESSION['over18'])) { 
        $validated=true; 
    }

    if($validated) { 
        return; 
    } else {
        $redirect_url=$redirect_url."?return=".$_SERVER['REQUEST_URI'];
        header('Location: '.$redirect_url);
        exit(0);
    }
}
over18();
?>


Dit leek in eerste instantie te werken.

Echter als de leeftijd 18+ is word de verify.php opnieuw geladen.
Iemand enig idee wat ik fout doe ik dit script, want ik kan er niet uitkomen..

  • Mentalist
  • Registratie: Oktober 2001
  • Laatst online: 18-11 12:59

Mentalist

[avdD]

Om te beginnen zie ik zowel "over18" als "under18" in je scripts, dat zou ik even gelijk maken.

Check eens in je browser of je wel een cookie hebt gekregen.

662256000 is 21 jaar, niet 18.. Ben je tussen de 18 en 21? :P

[ Voor 81% gewijzigd door Mentalist op 21-01-2013 03:34 ]

Verstuurd vanaf mijn Computer®


Verwijderd

Ik zie veel beginnersfouten.
Ronnyrr schreef op zondag 20 januari 2013 @ 23:06:
PHP:
1
2
3
4
5
$birthday = mktime(0,0,0,$month,$day,$year);
$difference = time() - $birthday;
$age = floor($difference - 662256000);http://gathering.tweakers.net/forum/update_message/39623429/0
if($age >= 18) {
}
Wat ben je hier precies aan het berekenen? Kijk eens naar de eenheden waar je in werkt en waar je vervolgens mee vergelijkt. Ga nu niet zelf klooien met aantal seconden in een jaar en dergelijke, je komt alleen maar in de knoei wat betreft schrikkeljaren en schrikkelseconden.
PHP:
1
2
// Zou dit niet makkelijker zijn om mee te vergelijken?
mktime(23, 59, 59, date('n'), date('j'), date('Y')-18);

En dan dit:
PHP:
1
$redirect=isset($_GET['return'])?urldecode($_GET['return']):'./';
Waarvoor is die urldecode nodig? Denk daar eens over na en bekijk eens de inhoud van die parameter zoals hij in je script beschikbaar is.
PHP:
1
$_SESSION['under18'] = 0;
Geen idee waarom je over18=1 en under18=0 gebruikt. De logica ervan ontgaat me.
PHP:
1
2
3
if(!empty($_COOKIE["over18"])) { 
   $validated=true; 
}
Ok, het is erg makkelijk om je script te omzeilen door een juiste geboortedatum op te geven. Maar waarom je vertrouwt op een cookie snap ik niet. Als dit iets belangrijkers was geweest, waarvoor ingelogd zou moeten worden, zou je dit nooit moeten doen. Dus eigenlijk ook niet in deze situatie. Vertrouw geen user input. Nooit.
PHP:
1
2
3
if(!$validated && isset($_SESSION['over18'])) { 
   $validated=true; 
}
Waarom niet gewoon if(isset($_SESSION['over18'])){, of beter nog:
PHP:
1
$validated |= isset($_SESSION['over18']);
PHP:
1
$redirect_url=$redirect_url."?return=".$_SERVER['REQUEST_URI'];
Hier moet je escapen.
PHP:
1
over18();
Wat is het nut van een functie als je hem definieert, direct erna aanroept, en nergens anders meer nodig hebt?

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Bedankt voor jullie reacties.
Het klopt inderdaad dat ik een beginner ben met PHP. Ik probeer het echter wel te begrijpen en er mee te leren werken :X

Ik heb het script, en de manier van werken omgegooid.
Toch heb ik nog wat gehad aan jullie reacties, bedankt.
Verwijderd schreef op maandag 21 januari 2013 @ 05:01:
Wat ben je hier precies aan het berekenen? Kijk eens naar de eenheden waar je in werkt en waar je vervolgens mee vergelijkt. Ga nu niet zelf klooien met aantal seconden in een jaar en dergelijke, je komt alleen maar in de knoei wat betreft schrikkeljaren en schrikkelseconden.
PHP:
1
2
// Zou dit niet makkelijker zijn om mee te vergelijken?
mktime(23, 59, 59, date('n'), date('j'), date('Y')-18);
Hier had je helemaal gelijk in. Dit werkt natuurlijk erg onhandig.
Dit heb ik nu veranderd in het volgende:
PHP:
1
2
$birthday = mktime(0,0,0,$month,$day,$year);
$age = mktime(23, 59, 59, date('n'), date('j'), date('Y')-18) - $birthday;


Dit lijkt goed te werken. Bedankt daarvoor!
Voor de rest ben ik nu afgestapt van alle session gerelateerde dingen uit mijn vorige script.
Ik gebruik nu een script dat elke pagina gecontroleerd d.m.v een cookie.
Als de cookie al bestaat word het formulier niet weergegeven. Bestaat die nog niet, zal de gebruiker dit wel moeten invullen.
Verwijderd schreef op maandag 21 januari 2013 @ 05:01:
Ok, het is erg makkelijk om je script te omzeilen door een juiste geboortedatum op te geven. Maar waarom je vertrouwt op een cookie snap ik niet. Als dit iets belangrijkers was geweest, waarvoor ingelogd zou moeten worden, zou je dit nooit moeten doen. Dus eigenlijk ook niet in deze situatie. Vertrouw geen user input. Nooit.
Dit klopt, dit is erg makkelijk te omzeilen.
Zoals @ W3ird_N3rd ook al aangaf zullen mensen dit waarschijnlijk ook doen. Hier is echter niets aan te doen. Helaas is zo'n dergelijke age verification wel een verplichting.
Tevens heb ik hiermee ook gelijk heb probleem voor de nieuwe cookie wetgeving opgelost. Want bij het invullen van de age verification moet de gebruiker ook akkoord gaan met cookies om verder te gaan.

Om nog in te haken op je vraag waarom ik hier vertrouw op cookies.
Het is iets wat als je het wilt, simpel te omzeilen is. Daarom is dat een makkelijke, werkende oplossing imo.

Mijn volledige script ziet er nu zo uit en werkt prima.
Voor als je geïnteresseerd bent of nog toevoegingen hebt hoe het beter kan ofc :X
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if($_SERVER['REQUEST_METHOD']=="POST") {
    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];
    
    $birthday = mktime(0,0,0,$month,$day,$year);
    $age = mktime(23, 59, 59, date('n'), date('j'), date('Y')-18) - $birthday;
    
    if($age >= 18 && isset($_POST['cookie'])) {
        setcookie("age", time()+604800);
        //voer uit
    } else {
        //voer niet uit
    }
}


De HTML is dan als volgt:
PHP:
1
2
3
if(!isset($_COOKIE['age'])) { 
 //hier tussen het formulier
}


Nogmaals bedankt voor jullie hulp!

[ Voor 15% gewijzigd door Ronnyrr op 21-01-2013 12:42 . Reden: Enkele kleine aanpassingen ]


  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 21-11 15:31

TheNephilim

Wtfuzzle

Je kunt eventueel met .htaccess checken of een bepaalde cookie bestaat en op basis daarvan doorsturen naar een 'leeftijds-checker'. Op die manier hoef je niet zoveel aan te passen aan je bestaande website.

http://www.askapache.com/...html#Rewrite_Based_Cookie

Wellicht een optie! :D

  • Merethil
  • Registratie: December 2008
  • Laatst online: 05:37
Mijn volledige script ziet er nu zo uit en werkt prima.
Voor als je geïnteresseerd bent of nog toevoegingen hebt hoe het beter kan ofc :X
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if($_SERVER['REQUEST_METHOD']=="POST") {
    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];
    
    $birthday = mktime(0,0,0,$month,$day,$year);
    $age = mktime(23, 59, 59, date('n'), date('j'), date('Y')-18) - $birthday;
    
    if($age >= 18 && isset($_POST['cookie'])) {
        setcookie("age", time()+604800);
        //voer uit
    } else {
        //voer niet uit
    }
}
Waarom maak je van
PHP:
1
2
3
4
5
6
if($age >= 18 && isset($_POST['cookie'])) {
        setcookie("age", time()+604800);
        //voer uit
    } else {
        //voer niet uit
    }


niet gewoon

PHP:
1
2
3
4
5
6
7
if($age >= 18 && isset($_POST['cookie'])) {
        setcookie("over18",1);
        //voer uit
    } else {
                 setcookie("over18",0);
        //voer niet uit
    }

?

Op die manier kan je gewoon vergelijken zonder dat je stom moet doen met leeftijden, seconden en onnodige data in je cookies.

Verwijderd

Merethil schreef op maandag 21 januari 2013 @ 15:01:
Op die manier kan je gewoon vergelijken zonder dat je stom moet doen met leeftijden, seconden en onnodige data in je cookies.
Omdat dat niet flexibel is. Stel je voor dat je de leeftijd wilt aanpassen in verband met nieuwe wetgeving...
Er is niets stom aan het rekenen met twee data, behalve dan als je gaat kijken of iemand meer of minder dan 18 seconden ouder is dan 18 jaar.

  • Merethil
  • Registratie: December 2008
  • Laatst online: 05:37
Verwijderd schreef op maandag 21 januari 2013 @ 15:13:
[...]

Omdat dat niet flexibel is. Stel je voor dat je de leeftijd wilt aanpassen in verband met nieuwe wetgeving...
Er is niets stom aan het rekenen met twee data, behalve dan als je gaat kijken of iemand meer of minder dan 18 seconden ouder is dan 18 jaar.
Je hebt wel een punt maar het gaat om toegang bij 18 jaar. Waarom zou je dan voor iedereen de leeftijd 18 + de huidige datum in seconden bewaren in cookies? Dat is gewoon dom vullen van je cookies imo.

Edit: Ik zie dat ik een stomme rekenfout maakte, maar nonetheless vind ik huidige datum + week gewoon niet nuttig in een cookie. Houd die dingen lekker klein.

[ Voor 13% gewijzigd door Merethil op 22-01-2013 10:31 ]


  • Mentalist
  • Registratie: Oktober 2001
  • Laatst online: 18-11 12:59

Mentalist

[avdD]

Zie ik het nu niet goed of is de inhoud van je cookie de huidige tijd + 1 week? Dat bedoelde je waarschijnlijk als expiration date, waar ik overigens ook geen voorstander van ben.. Geef dat cookie gewoon een houdbaarheidsdatum van een jaar. Nagscreens zijn al irritant genoeg.

Als inhoud zou ik $birthday gebruiken. Mocht je de leeftijd later aan willen passen naar bijvoorbeeld 16 of 21, dan kan je gewoon de leeftijd terugrekenen en hoef je geen nagscreen te tonen als het niet nodig is.
code:
1
2
3
<?php
setcookie("age", $birthday, time()+31536000);
?>

[ Voor 18% gewijzigd door Mentalist op 22-01-2013 02:22 ]

Verstuurd vanaf mijn Computer®

Pagina: 1