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

[PHP] Veilig user selectie verwerken

Pagina: 1
Acties:

Onderwerpen


  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
Beste Tweakers,

Ik kom er niet uit door zelf te redenereren, maar de ervaren PHP devvers zullen hier vast binnen enkele seconden een antwoord op hebben. Ik presenteer meerdere "objecten" die onder elkaar staan op een pagina. De gebruiker kan zich op een object inschrijven door op "Inschrijven" naast het betreffend object te klikken. Vervolgens wordt er een UPDATE query uitgevoerd waarbij aan de hand van het object ID vanuit de HTML hidden tags die wordt teruggestuurd naar de server een update op het STATUS veld gedaan. Ik zag dat je met bepaalde browser addons deze hidden html input tags kan veranderen naar wat men wil. Resultaat is dan dat men allerlei andere objecten kan aanpassen in de database terwijl deze hier helemaal niet op staan ingesteld. Hoe kan ik dit voorkomen? Dat de user hier niet tussen kan komen?
Ik zat te denken aan een soort match met een intern gegenereerde MD5 hash per object, maar dat lost maar een deel van het probleem op want als de MD5 hash en de ID in de hidden html tags staan, dan kan men als nog dit specifieke object altijd aanpassen. Ik hoop dat het zo enigzins duidelijk is. Nog een afbeelding ter verduidelijking:

http://www.freeimagehosting.net/15fba

Iemand een idee? :)

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 23-10 00:49
Aan de serverkant kijken welke objecten die gebruiker mag aanpassen. Nooit user input vertrouwen.

Dus dit soort beveiliging hoort niet aan de browserkant maar aan de serverkant (script wat de input verwerkt).

Een kleine tip; sessies kan je niet vanaf de client aanpassen en worden daarom gebruikt om te onthouden wie een gebruiker is nadat deze is ingelogd.

  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
McVirusS schreef op donderdag 05 juli 2012 @ 16:59:
Aan de serverkant kijken welke objecten die gebruiker mag aanpassen. Nooit user input vertrouwen.

Dus dit soort beveiliging hoort niet aan de browserkant maar aan de serverkant (script wat de input verwerkt).

Een kleine tip; sessies kan je niet vanaf de client aanpassen en worden daarom gebruikt om te onthouden wie een gebruiker is nadat deze is ingelogd.
Bedankt voor je input. Ik kan daar inderdaad inkomen, alleen: hoe geef ik de input van de gebruiker terug die verwijst naar het specifieke record dat geupdate moet worden zonder een veiligheidslek te creeeren?

  • keejoz
  • Registratie: November 2008
  • Laatst online: 26-10 07:33
Gewoon checken dat hetgene wat de gebruiker veranderd ook daadwerkelijk door die gebruiker veranderd kan & mag worden.

  • alex3305
  • Registratie: Januari 2004
  • Nu online
Precies. Altijd user input controleren, of je nu met GETs, POSTs of net wat werkt. Het kan altijd zijn dat een kwaadwillende gebruiker de input voor jouw database wil aanpassen. En zo moeilijk is dat niet hoor :).

  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
Kan iemand een voorbeeldje geven hoe dat in zijn werking gaat? Aangeven wat de gebruiker mag aanpassen? Ik moet even het conceptuele plaatje krijgen

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 23-10 00:49
Zelfde logica waarmee je bepaald welke objecten getoond worden in de browser waarop een gebruiker zich mag inschrijven.

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Xanthium schreef op donderdag 05 juli 2012 @ 17:03:
Kan iemand een voorbeeldje geven hoe dat in zijn werking gaat? Aangeven wat de gebruiker mag aanpassen? Ik moet even het conceptuele plaatje krijgen
Je kijkt gewoon of iemand a,b,c,d of e gekozen heeft, de opties die jij geeft. Zo niet, dan is er blijkbaar wat aangepast en ga je terug naar het form met een foutmelding?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Xanthium schreef op donderdag 05 juli 2012 @ 17:03:
Kan iemand een voorbeeldje geven hoe dat in zijn werking gaat? Aangeven wat de gebruiker mag aanpassen? Ik moet even het conceptuele plaatje krijgen
PHP:
1
2
3
4
5
6
7
$objectids = array(1, 9, 20, 49);  // Hoe je die uit je $_POST haalt weet je wel neem ik aan
foreach ($objectids as $objectid) {
  if ($this->currentuser->canSubscribeToFoo($objectid)) //Hoe je canSubscribeToFoo() implementeert weet jij beter dan ik ;)
    //Do stuff
  else
    throw new Exception('Hey! Wat denkte gij!? Da we gek zijn ofzo?');
}

canSubscribeToFoo(...) kun je natuurlijk vervangen met hasPermissionOn(...) of isAllowedToChange(...) of ...

[ Voor 12% gewijzigd door RobIII op 05-07-2012 17:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Xanthium
  • Registratie: September 2005
  • Laatst online: 25-07 11:59
Dank ik ga eens kijken of ik er uit kom en koppel dat terug :)
Pagina: 1