waar slaat dit op? $_POST-variabelen moet je niet zomaar kopieren naar 'gewone variabelen'.
- Haal je variabelen buiten quotes!
- Gebruik addslashes() bij strings en intval() bij integers en floatval() bij floats binnen queries. Zo voorkom je MySQL-injection!
Simon - 04/04/2006 13:07 (laatste wijziging 04/04/2006 13:08)
PHP expert
@trinity, wtf doe jij nu eigenlijk? je haalt de vars terug binnen de quotes...
Simon, bij een SELECT kun je toch ook vergelijken met de inhoud van een variabele. Die inhoud kan jouw query laten stuklopen, wanneer je daarvoor geen voorzieningen treft.
$verbergemail = $_POST['verbergemail'];
Waarom zou je $_POST['verbergemail'] niet gebruiken i.p.v. $verbergemail? Geef eens de toegevoegde waarde hiervan?
Men ziet veelal het nut niet in van gecontroleerde invoer, totdat het fout gaat. Maar ja, beginnertjes denken het vaak beter te weten. In plaats dat ze wat aannemen, rommelen ze zelf maar wat aan.
ik vind het een kleine moeite om die controle toe te voegen. Je kan er zover in gaan als je wilt.....
weleens gedacht aan het volgende?
File upload systeem ---> gebruiker stuurt een txt bestand van 8mb door ---> dit moet je script opvangen en een melding sturen! want tis wel een erg groot tekstbestand ;)
Inderdaad, zo kun je ook nog controleren op MIME-type + extensie. In je .htaccess kun je overigens de maximale bestandgrootte van het te uploaden bestand aan banden leggen.
Wat queries betreft: als men de queries wat beter opbouwt (dus niet roekeloos SELECT * gebruiken, etc.) en gebruik maakt van mysql_free_result dan gaat het al heel wat beter.
Inderdaad, zo kun je ook nog controleren op MIME-type + extensie.
Dit is inderdaad een van de dingen die mij zorgen baart. Je ziet steeds vaker dat men bij upload-scripts wel controleert op een extensie maar niet op de MIME-Type. Terwijl de MIME-type juist meer over het bestand zegt dan de extensie.
@Simon, ga nu niet bijdehand doen, want dat heb je ook niet gepost. Hoe kan ik dat dan weten? Jij behoort ook al tot 'die club van ....' en vul maar in.
jij zit hier te zeggen, dat mijn script niet veilig is enzovoort, terwijl het dat wel is...
dus jij moet niet denken dat je het allemaal wel weet
Citaat:
Men ziet veelal het nut niet in van gecontroleerde invoer, totdat het fout gaat.
Ik controleer de invoer wel, maar wat kan er nou foutgaan bij een select? Hoe zou je daar SQL injection kunnen doen? Bij input text velden etc doe ik uiteraard addslashes()
SELECT naam FROM personen WHERE id = " . $_GET['id']
maar $_GET['id'] kan natuurlijk ook iets anders dan een getal zijn.
Daarom:
SELECT naam FROM personen WHERE id = " . intval($_GET['id'])
* Trouwens, ik mag toch commentaar geven? Het is voor je eigen bestwel, hoor. Van opbouwende kritiek kun je leren. Dat geldt in alle opzichten. Het is soms lastig om kritiek te ontvangen, maar het is vaak goed voor je.