login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Een query veilig maken

Offline roelh - 12/07/2006 19:56
Avatar van roelhPHP gevorderde Heey allemaal,

ik las hier tijdje terug iets over het veilig maken van een query.
Maar ik kan het nergens meer terugvinden namelijk 
Wie kan me uitleggen hoe je een query veilig krijgt?

Alvast bedankt,

Groet,

8 antwoorden

Gesponsorde links
Offline Rens - 12/07/2006 20:17
Avatar van Rens Gouden medaille

Crew algemeen
Op PHPfreakz.nl hebben ze daar een mooi artikel over staan.
http://www.phpfreakz.nl/artikelen.php?aid=106
Lees dat maar eens gewoon helemaal door.
Daarna weet je denk ik wel wat je er allemaal voor de kunt doen 
Offline roelh - 12/07/2006 20:24
Avatar van roelh PHP gevorderde Hmmss dus als ik het goed begrijp, moet ik voor alle informatie die ik ik de DB zet addslash() gebruiken?
En dan zou het veilig moeten zijn?
iig veiliger dan als je het niet doet, zo juist? 
Offline Thomas - 13/07/2006 13:04
Avatar van Thomas Moderator addslashes() kan natuurlijk nooit kwaad. Je zou ook nog type-controles uit kunnen voeren met bijvoorbeeld is_numeric(), en kunnen controleren of een waarde uit je querystring binnen een bepaald waardebereik valt.

Maar je begint altijd met het controleren of een variabele uberhaupt wel bestaat met isset().
Je zou dus achtereenvolgens kunnen controleren:
- op het bestaan
- op het type
- of de waarde in een bepaald bereik valt.

Dit kan in principe in één if-statement, want if-statements maken gebruik van "lazy evaluation" (volgens mij).

Dit houdt in dat als jij een if-statement hebt met enkel &&, en er een onderdeel is wat false oplevert, er niet meer gekeken wordt naar de rest van het if-statement omdat false && ietsanders nooit true oplevert. Dus als je vlnr de bovenstaande controles uitvoert kan het in één if-statement:

  1. if(isset($_GET['var']) && is_numeric($_GET['var']) && $_GET['var'] > 10)
  2. {
  3. ...
  4. }


Let op de volgorde! Als $_GET['var'] geset is, dan wordt er verder gekeken naar de rest van het if-statement, anders niet (lazy evaluation). Nu kun je een controle uitvoeren op het numeriek zijn van de (bestaande!) $_GET-variabele. Als de waarde niet numeriek is, knal je weer uit het if-statement (lazy evaluation). Als de waarde numeriek is zou je de waarde met een andere (numerieke) waarde kunnen vergelijken.

Alle onderdelen van het if-statement die je "passeert", gelden blijkbaar, en daar kun je dan in de rest van je if-statement gebruik van maken.
Offline Ibrahim - 13/07/2006 17:04
Avatar van Ibrahim PHP expert je kunt ook met regexes bekijken of iets wel klopt zoals jij het wilt zoals bijv. een email adres. Die mag namelijk niet sommige tekens bevatten + een email adres hoort een @ erin te hebben en een extensie enz.

dus met regex kun je nog verder gaan in het controleren van 'user input'
Offline marten - 13/07/2006 17:58
Avatar van marten Beheerder @boven

Niet teveel regs gebruiken want ze zijn vetragend

heb ik eens gehoord tenminste dus goed kijken wat je met andere functies kan oplossen die al in php zitten en als het niet anders kan naar de regs gaan
Offline Voldemort - 13/07/2006 18:03 (laatste wijziging 13/07/2006 18:03)
Avatar van Voldemort PHP ver gevorderde Zelf gebruik ik nooit addslashes omdat ik het niet goed vind (je krijgt problemen met die functie magic_quotes_gpc enzo). Ik gebruikt steeds:

  1. htmlentities($_POST['gebruikersnaam'],ENT_QUOTES);


En voor nummers:

  1. is_numeric($_GET['id']);


Als je de eerste gebruikt bij elke userinput en de tweede overal waar je een ?id= of zoiets in je url hebt ben je al vrij veilig.
Offline Ibrahim - 15/07/2006 16:43 (laatste wijziging 15/07/2006 16:49)
Avatar van Ibrahim PHP expert
Citaat:
@boven

Niet teveel regs gebruiken want ze zijn vetragend

heb ik eens gehoord tenminste dus goed kijken wat je met andere functies kan oplossen die al in php zitten en als het niet anders kan naar de regs gaan


heb het nagevraagd, en het werkt helemaal niet vertragend hoor 

@topicstarter:
je kunt ook content van een variabele dwingen naar je gewenste type:
(int)(integer)(array) enz.
object heeft wel een opmerkelijke manier van veranderen:
je moet het namelijk eerst in een variabele steken, daarna echooen als een object:
  1. <?php
  2. $obj = (object) 'ciao';
  3. echo $obj->scalar; // outputs 'ciao'
  4.  
  5. //van php.net/object
  6. ?>


en iets naar resource veranderen kun je niet.
php.net
Citaat:
As resource types hold special handlers to opened files, database connections, image canvas areas and the like, you cannot convert any value to a resource.


en iets naar NULL veranderen doe je:
  1. <?php
  2. $var = NuLL; // case insensitive
  3. ?>


edit:
je kunt ook dingen controleren op de type die je wilt met deze functies:
PHP.net: is_array
PHP.net: is_bool
PHP.net: is_callable
PHP.net: is_double
PHP.net: is_float
PHP.net: is_int
PHP.net: is_integer
PHP.net: is_long
PHP.net: is_null
PHP.net: is_numeric
PHP.net: is_object
PHP.net: is_real
PHP.net: is_resource
PHP.net: is_scalar
PHP.net: is_string

en je kunt ook een type setten met de settype functie:
Citaat:
(PHP 3, PHP 4, PHP 5)

settype -- Set the type of a variable

bool settype ( mixed &var, string type )
Offline xSc - 15/07/2006 16:49
Avatar van xSc Onbekend Ik controleer altijd met 'regs'. Ik vind ze ideaal en je weet precies 'wat' je opslaat. Ook al zou het vertragend werken, je houdt je database bijvoorbeeld wel netjes.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.213s