[PHP/Security] Veiligheid van code

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
Ik ben bezig met een site te ontwikkelen en geef users de mogelijkheid om een profiel met foto aan te maken. Nu kan dit profiel door iedereen worden opgevraagd zonder in te loggen (noodzakelijk). In dit profiel wordt ook melding gemaakt van het emailadres van deze user. Nu wil ik niet al te voorspelbaar het profiel op kunnen vragen. Dus onwenselijk is het volgende:


code:
1
show_profile.php?userid=20


Dit zou betekenen dat iemand met een beetje script-kennis zo mijn DB kan harvesten op emailadressen. Dus ik dacht laat ik een crypt functie erop los met eigen passphrase:

PHP:
1
crypt($gegevens['id'], 'passphrase');


Probleem is echter dat crypt ook in de uitvoer / kan hebben, niet echt handig bij het opvragen van url's. Ik heb toen geprobeerd te urlencoden maar dit heeft geen effect en de slashes blijven staan bij opvragen van profiel. Erg vaag..

Nu heb ik het volgende bedacht:

PHP:
1
base64_encode(crypt($gegevens['id'], 'passphrase'));


Dit geeft bijvoorbeeld voor id = 20 en een passphrase die ik niet verraad :) de volgende code:

code:
1
Z2laLmJBcXgwenZ5Lg==


Nu kan je dus alleen het profiel opvragen doordat je bijvoorbeeld de link van iemand hebt gekregen. Mijn vraag: is dit afdoende als beveiliging? Voorkom ik zo dat je alle profielen kunt opvragen?

Kamer huren


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Is het niet slimmer om de e-mail adressen als plaatje o.i.d. weer te geven?
Dan zijn ze ook een stuk lastiger te harvesten. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • bonzz.netninja
  • Registratie: Oktober 2001
  • Laatst online: 09:24

bonzz.netninja

Niente baffi

maar dan moet je dat overtikken als je het als normale gebruiker wilt gebruiken

vuistdiep in het post-pc tijdperk van Steve  | Joepie joepie. Dat ging echt toppie! | https://www.dedigitaletuin.nl


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
En in plaats van al dat gezeur met base64, encrypt en bla bla bla, gewoon een random ID geven aan gebruikers, die bij aanmaak gegenereerd wordt, en daarna altijd het ID is?

maw:
code:
1
$query = "insert into users (username,password,id) values ($username, $password, substr(md5($username.$password.$time), 0, 10));"

[ Voor 5% gewijzigd door sariel op 11-05-2006 11:48 ]

Copy.com


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
en wat dat email adres betreft....maak gewoon een mail-naar-gebruiker pagina. die vraagt een email adres (of gebruikt die uit je profiel), een naam, en een bericht. heb je minder gezeur van spammers.

Copy.com


Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
sariel schreef op donderdag 11 mei 2006 @ 11:49:
en wat dat email adres betreft....maak gewoon een mail-naar-gebruiker pagina. die vraagt een email adres (of gebruikt die uit je profiel), een naam, en een bericht. heb je minder gezeur van spammers.
Emailadres is slechts 1 van de dingen die ik wil beveiligen. Een heel profiel moet wat mij betreft gewoon niet al te openbaar zijn.

Kamer huren


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
"niet al te openbaar".......jaja.....

als je niet wil dat niet-ingelogde mensen email adressen zien, dan laat je die toch gewoon niet outputten? of is dat te makkelijk?

Copy.com


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Gonadan schreef op donderdag 11 mei 2006 @ 11:44:
Is het niet slimmer om de e-mail adressen als plaatje o.i.d. weer te geven?
Dan zijn ze ook een stuk lastiger te harvesten. :)
Inderdaad. Harvesters zullen sneller links volgen dan zelf id's gaan raden in de URL. Eventueel kun je Javascript gebruiken ipv een plaatje, als je het klikbaar wilt houden.

Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

GlowMouse schreef op donderdag 11 mei 2006 @ 12:19:Inderdaad. Harvesters zullen sneller links volgen dan zelf id's gaan raden in de URL. Eventueel kun je Javascript gebruiken ipv een plaatje, als je het klikbaar wilt houden.
je laatste suggestie is lang niet waterdicht. Ik zou er eerder voor kiezen via een plaatje en een mailer op je site te werken dan via een obfuscator je mail adres te encoderen. De nieuwste harvesters zijn hier al tegen bestend namelijk.

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

Verwijderd

Kun je niet een gedeelte van het profiel beschikbaar maken voor mensen die niet ingelogd zijn en een gedeelte voor mensen die wel ingelogd zijn. Dan laat je alleen het email zien aan ingelogde mensen.

En als je met POST werkt ipv GET dan scheelt dat ook al weer een hoop.

[ Voor 16% gewijzigd door Verwijderd op 11-05-2006 12:28 ]


Acties:
  • 0 Henk 'm!

  • BKJ
  • Registratie: April 2000
  • Laatst online: 18-09 14:52
Verwijderd schreef op donderdag 11 mei 2006 @ 12:26:
Kun je niet een gedeelte van het profiel beschikbaar maken voor mensen die niet ingelogd zijn en een gedeelte voor mensen die wel ingelogd zijn. Dan laat je alleen het email zien aan ingelogde mensen.

En als je met POST werkt ipv GET dan scheelt dat ook al weer een hoop.
Dat is zeker een optie, aan de andere kant geef ik niet graag concurrent gevoelige info prijs: hoeveel members er zijn etc...

Kamer huren


Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
ik ben met sariel in deze : gebruik random id's. ik gebruik daar altijd de php-functie 'uniqid' voor, en heb nog nooit een collision gehad. auto_increment id's gebruik je alleen intern, in je eigen code...

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
dip schreef op donderdag 11 mei 2006 @ 12:22:
[...]

[Javascript] is lang niet waterdicht.
Toch wel. De enige manier waarop een harverster de output van Javascript kan bepalen is door die Javascript te runnen, dat is een vrij simpele vuistregel.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

hitchhacker schreef op donderdag 11 mei 2006 @ 12:30:
Dat is zeker een optie, aan de andere kant geef ik niet graag concurrent gevoelige info prijs: hoeveel members er zijn etc...
Dus dat is je eigenlijke "probleem" als ik je goed begrijp?
Kies dan niet voor een nummertje maar bijvoorbeeld random tekenreeks als primary key in je database :)

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom niet gewoon een simpele if en zeg je dat als er naar het profiel gegaan wordt vanuit een externe website dat hij een melding geeft met die dat de profielen niet van buitenaf benaderd kunnen worden?

Een tweede suggestie: Laat input van een gebruiker nooit alleen gecontroleerd worden op client-side (dus javascript) maar ook server side met een if of case ik heb zo bijvoorbeeld namelijk al verhalen gelezen dat er computers verkocht werden voor $1,- omdat de prijs gewoon niet aan de server-side gechecked werd.

[ Voor 44% gewijzigd door Verwijderd op 12-05-2006 11:13 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

MSalters schreef op donderdag 11 mei 2006 @ 19:35:
[...]

Toch wel. De enige manier waarop een harverster de output van Javascript kan bepalen is door die Javascript te runnen, dat is een vrij simpele vuistregel.
En denk je dat er een bots bestaan die javascript verstaan? Wel dus ;)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
snake903 schreef op vrijdag 12 mei 2006 @ 23:03:
[...]
En denk je dat er een bots bestaan die javascript verstaan? Wel dus ;)
'Er is' != 'alle'. Je vangt welzeker een behoorlijk deel van de bots af.
Verwijderd schreef op donderdag 11 mei 2006 @ 12:26:
Kun je niet een gedeelte van het profiel beschikbaar maken voor mensen die niet ingelogd zijn en een gedeelte voor mensen die wel ingelogd zijn. Dan laat je alleen het email zien aan ingelogde mensen.
Dit is zeker een handige maatregel. Als iemand niet wil registreren en met de community wil meedoen, hoeft hij ook niet alle gegevens van die community te zien. Uiteraard is alleen deze maatregel niet voldoende als registreren simpel is.
En als je met POST werkt ipv GET dan scheelt dat ook al weer een hoop.
Bah, bah bah. Door GET en POST requests in de verkeerde situatie te gebruiken werk je in strijd met 1 van de belangrijkste http features. Je breekt bookmarks, navigeren wordt een ramp (back button en vervolgens krijg je de vraag of je weer het formulier wil submitten :X ) en je kan niet aan de link zien waar je heen gaat. Laten we alsjeblieft POST puur gebruiken waar het voor bedoelde is, bijvoorbeeld het POSTen van een formulier waar een niet idempotente actie op volgt.

Als jij dankzij POST-misbruik het navigeren op je site vervelender maakt, raak je niet alleen (misschien) een bot kwijt, maar zeker weten mij als bezoeker.

[ Voor 9% gewijzigd door Voutloos op 12-05-2006 23:23 ]

{signature}

Pagina: 1