PFZ.nl - PHP Community: Persoonlijke gegevens database lezen - Applicatieontwerp en -theorie - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 03-02-2012 18:31
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Hallo allemaal,

Ik wil berichten uit een database lezen met behulp van een URL.
Dus zo iets als www.sitedomeinvanmij.nl?id=5545634754
Nu vroeg ik mij af, is dit een goede manier om zo berichten uit een database te lezen of is er een betere manier afgezien een login formulier?

Alvast bedankt!

n9iels

#2 03-02-2012 21:37
  • Davidb52
  • Groep: Forumleden
  • Posts: 114
  • Actief sinds: 20-04-2011
Ja gewoon doen. Iedereen doet het zo. En als je het een beetje wil afwerken kun je het met http acces doen dacht ik. Dan krijg je zoiets (voorbeeld) http://www.facebook.com/charlestrippy i.p.v http://www.facebook....e=charlestrippy

#3 03-02-2012 21:46
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007
Dit is geen specifieke vraag over Databases, ik verplaats dit topic naar Applicatieontwerp en -theorie.
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#4 04-02-2012 00:36
  • Ivo P.
  • Groep: Verenigingsleden
  • Posts: 2802
  • Actief sinds: 17-01-2002
Je moet wel afvangen dat iemand niet andermans berichten kan lezen door simpelweg dat id in de url aan te passen.
Ivo Peters
Developer en systeembeheerder @ PeHa ICT Services. blog.peha-ict.nl

#5 04-02-2012 05:38
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Ja, daar had ik ook al aan gedacht, ik maak nu zo de standaard waarde:

$random = mt_rand(1, 999999999);
$ip = $_SERVER['REMOTE_ADDR'];
$randomURL = $ip.''.$random;

Lijkt me dat je dan niet zo snel even een nummertje veranderd in de url en dan ander mans berichten kan lezen.

Of zou jij het anders doen?

@ Davidb52: Mijn host ondersteund geen .htacces, dus dat gaat helaas niet lukken.

n9iels

#6 04-02-2012 09:53
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 06:38 schreef n9iels:

@ Davidb52: Mijn host ondersteund geen .htacces, dus dat gaat helaas niet lukken.
Weet je dat zeker? Het is volgens mij tegenwoordig vrijwel standaard dat dit aan staat.
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#7 04-02-2012 09:56
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Jep, zeker weten!
mijn host (sohosted) doet alles met iirf.ini

#8 04-02-2012 10:05
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 10:56 schreef n9iels:

Jep, zeker weten!
mijn host (sohosted) doet alles met iirf.ini
Dan kun je toch urls herschrijven? http://www.sohosted....k/faq/vraag=129
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#9 04-02-2012 10:08
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
oké, kan wel wezen, maar ik kan niet helemaal meer volgen wat ik nou met die .htacces moet doen.

#10 04-02-2012 10:19
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 11:08 schreef n9iels:

oké, kan wel wezen, maar ik kan niet helemaal meer volgen wat ik nou met die .htacces moet doen.
Daarmee kun je de url netter maken.
In plaats van zo'n url: www.sitedomeinvanmij.nl?id=5545634754
kun je dan zo'n url maken: www.sitedomeinvanmij.nl/laatste-nieuws
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#11 04-02-2012 10:29
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Oké, maar ik heb geen idee hoe ik dat zou moeten doen, ik heb me daar namelijk nog nooit mee bezig gehouden. Overigens heb ik ook niet zo veel behoefte haar.

#12 04-02-2012 10:35
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 11:29 schreef n9iels:

Oké, maar ik heb geen idee hoe ik dat zou moeten doen, ik heb me daar namelijk nog nooit mee bezig gehouden. Overigens heb ik ook niet zo veel behoefte haar.
Daar kun je op zich op een later moment naar kijken en als je het nut ervan in gaat zien, ga je er gegarandeerd behoefte aan krijgen om het te gebruiken :)

Anyhow, voor het ophalen van die berichten op de manier zoals beschreven in je openingspost, kun je $_GET['id'] gebruiken in je query en dan de gegevens ophalen uit je database. Houd daarbij het punt van Ivo even goed in de gaten.
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#13 04-02-2012 11:00
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Zoals ik al liet zien, ik maak een willekeurig getal met eerst het ip nummer en vervolgens een willekeurig getal tussen de 1 en 999999999 met de mt_rand() functie.
Lijkt me dan toch behoorlijk moeilijk om met het zelfde ip adres een random getal te krijgen van de 999999999 getallen.
of zie ik dat fout?

#14 04-02-2012 11:06
  • Ivo P.
  • Groep: Verenigingsleden
  • Posts: 2802
  • Actief sinds: 17-01-2002
moeilijk of niet, dubbelen kunnen voorkomen.

rand(1, 10) dan snapt iedereen dat je na 11 pogingen zeker een dubbele te pakken hebt.

maar ook dan kan het voorkomen dat getal 1 en 2 precies gelijk zijn.

Met een getal met 9 nullen is de káns kleiner, maar dat wil niet zeggen dat de kans 0 is.

Veel zekerder is het om in de database bij het bericht op te slaan van wie het is, en het alleen te tonen als hij het zou mogen zien.

dus
SELECT bla bla
FROM messages
WHERE messages.id = 1234567897
AND user_id = 999

waarbij 999 dan in een $_SESSION wordt meegenomen.

Op die manier heb je geen kansen op een dubbel id,
of het raden van een id en heb je zekerheid dat de user het item mag zien.
Ivo Peters
Developer en systeembeheerder @ PeHa ICT Services. blog.peha-ict.nl

#15 04-02-2012 11:13
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 12:00 schreef n9iels:

Lijkt me dan toch behoorlijk moeilijk om met het zelfde ip adres een random getal te krijgen van de 999999999 getallen.
of zie ik dat fout?
Als je het met de hand moet intikken, ben je inderdaad even zoet. De meeste hackers doen dat echter niet met de hand en laten er gewoon een geautomatiseerd scriptje op los en dan wordt het behoorlijk makkelijk ;)
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#16 04-02-2012 11:43
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Daar had ik ook al aangedacht, maar ik zit met de volgende probleem:
Ik weet enkel het op van de gene die iets verstuurd, en niet het ip van de ontvanger.

Hoe doet een ecard verstuurden dat dan bijvoorbeeld?
Ik kan met niet herinneren dat ik ooit een heb moeten inloggen om een ecard te kunnen bekijken.
Dat zijn tenslotte ook gegevens die niet zomaar op straat mogen liggen.

#17 04-02-2012 11:59
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 12:43 schreef n9iels:

Ik kan met niet herinneren dat ik ooit een heb moeten inloggen om een ecard te kunnen bekijken.
Klopt, daar wordt gewerkt met een unieke hash, een x aantal willekeurige karakters achter elkaar. Het aantal mogelijkheden daarbij is aanzienlijk hoger en lastiger te raden dan enkel cijfertjes.

Bekijk Post Op 04-02-2012 12:43 schreef n9iels:

Dat zijn tenslotte ook gegevens die niet zomaar op straat mogen liggen.
Welke gegevens? De tekst Gefelicteerd van ome Piet en tante Truus? :)
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#18 04-02-2012 16:46
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Haha, oké daar hoef ik me dan geen zorgen om te maken omdat het systeem dat ik maak ongeveer dat soort berichten moet versturen.
Erg bedankt voor jullie hulp en raad!!

n9iels

#19 04-02-2012 16:51
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 17:46 schreef n9iels:

Haha, oké daar hoef ik me dan geen zorgen om te maken omdat het systeem dat ik maak ongeveer dat soort berichten moet versturen.
Dat het geen belangrijke gegevens zijn, maakt het nog niet zo dat je enkel met getalletjes zou moeten werken. Als je dat toch doet, denk ik dat je er heel erg verstandig aan doet om dit heel duidelijk op te nemen in je algemene voorwaarden. Anders kun je van een koude kermis thuiskomen en word je alsnog door de betreffende instanties op je vingers getikt vanwege nalatigheid met persoonsgegevens (als deze ook zichtbaar zijn).
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#20 04-02-2012 17:08
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Dus dan moet ik gaan werken met letters en cijfers.
Hoe maak ik een willekeurige waarde met letters?
Of raad je aan om toch iets te doen met een soort inlogsysteem?

#21 04-02-2012 17:19
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 18:08 schreef n9iels:

Dus dan moet ik gaan werken met letters en cijfers.
Hoe maak ik een willekeurige waarde met letters?
Of raad je aan om toch iets te doen met een soort inlogsysteem?
Met een inlogsysteem kun je dit natuurlijk het beste doen. Dan kun je zoals Ivo aangeeft aan de hand van de user_id en message_id het juiste bericht tevoorschijn toveren zonder dat anderen er ooit bij kunnen.

Als je met een unieke code wilt werken, kun je dat bijvoorbeeld zo doen:
1
2
3
4
5
6
7
<?php
$userName = 'Piet';
$userId = '8';

$source = $userId . $userName . time();

echo sha1( $source );

Die code sla je op in de database en alleen met die code kan het bericht worden opgehaald. Let er wel op dat je een UNIQUE CONSTRAINT op de betreffende kolom zet, zodat er nooit een dubbele code kan worden uitgegeven.
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#22 04-02-2012 18:03
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Ik snap niet helemaal wat ik met het variabele $source moet doen.
Het idee is toch dat je een formuliertje maak met een login en wachtwoord?
Als dat zo is snap ik het user_id gedoe niet helemaal, want je kunt dan toch precies het zelfde met een wachtwoord?

#23 04-02-2012 18:32
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Ik heb even zitten na denken en ik wil het zo doen:
Bij het versturen word er een id nummer aangemaakt waarmee je bij het bericht kan komen.
In de url wordt een wachtwoord en het email adres verwerkt met behulp van een GET functie.
De ontvanger krijgt dan een mailtje waar een url in staat waar deze gegevens in zijn verwerkt.
Op deze manier heeft de gebruiker enkel de gegevens en kan deze direct bij het bericht door enkel op de url te klikken in het mailtje.
Veilig en gebruikersvriendelijk!

Goed idee of niet?

#24 04-02-2012 18:54
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007

Bekijk Post Op 04-02-2012 19:03 schreef n9iels:

Ik snap niet helemaal wat ik met het variabele $source moet doen.
Het idee is toch dat je een formuliertje maak met een login en wachtwoord?
Je komt zelf toch met 2 opties?
1) unieke code
2) inloggen

Bekijk Post Op 04-02-2012 19:03 schreef n9iels:

Als dat zo is snap ik het user_id gedoe niet helemaal, want je kunt dan toch precies het zelfde met een wachtwoord?
Je moet unieke waarden hebben en feit is dat een wachtwoord niet uniek is.

Bekijk Post Op 04-02-2012 19:32 schreef n9iels:

Bij het versturen word er een id nummer aangemaakt waarmee je bij het bericht kan komen.
En het genereren van dat nummer (waar je eerder zelf naar vroeg) staat hierboven uitgelegd.

Het is een beetje lastig communiceren als je zelf niet weet welke vragen je stelt :)
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#25 04-02-2012 18:57
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Ik ga morgen eens even knutselen en laat wel weten hoe het is afgelopen!

n9iels

#26 05-02-2012 07:34
  • n9iels
  • Groep: Forumleden
  • Posts: 184
  • Actief sinds: 27-05-2011
Ik heb eens even wat in elkaar geknutseld, en dit is er uit gekomen.
Om het bericht op te roepen heb je bijvoorbeeld deze url nodig:
http://urlvanbericht...c85&email=email@emailadres.nl&wachtwoord=17a8a03b4bd71bc4665ca8b922802e3b349bb8f6

hier in zit verwerkt:
- het zelfde random getal als ik in post #5 uitlegde, alleen dat gecodeerd met een sha1() functie.
- het email adres van de ontvanger
- een random getal gecodeerd met sha1 wat als wachtwoord dient.

Als een van deze waardes ontbreekt om niet gelijk is met wat in de database staat krijg je simpel weg de melding dat het bericht niet meer bestaat.

Is dit veiliger en beter?


Inloggen wachtwoord vergeten? Aanmelden