Variabelen onthouden
Ik heb in een MySQL database sensorwaarden staan. Deze waarden lees ik uit en bewerk ik met PHP en toon ik in een grafiek. In de grafiek wordt data van die dag getoond.
Nu wil ik boven de grafiek twee knoppen maken met, "Volgende dag" en "Vorige dag" zodat je van andere dagen de sensorwaarden kunt zien. Ik moet dus op een of andere manier onthouden welke dag in de grafiek is ingeladen. Hoe kan ik dit doen?
Waardes.php?dag=04-03-2015
Voordeel is dat je gebruiker een schone URL heeft en dat je minder kans hebt op SQL-injectie via je URLs.
Nadelen zijn o.a. dat je de sessie gebruikt (kost ruimte, is trager dan GET) en dat het niet te bookmarken is door de gebruiker.
Open op tab 1 de data van 1 febr.
Open op tab 2 de data van 1 maart
Ga naar tab 1 en druk op de link Volgende en krijg de data van 2 maart....
Oke bedankt. Dan kan ik het dus het beste met GET doen en dan uitzoeken hoe ik SQL injectie kan voorkomen.
Als dit mijn url van de GET is: Waardes.php?dag=04-03-2015 dan zou ik toch de string 04-03-2015 kunnen controleren of deze aan een datum formaat voldoet? Dan zou SQL injectie toch niet mogelijk moeten zijn, of zie ik dat verkeerd?
Zie checkdate().
Die controle komt pas nadat je de query uitvoert, dus je kan nog altijd een SQL-injection uitvoeren, ondanks iemand de melding krijgt dat de datum niet correct is.
Of je dat nou met real_escape_string, checkdate of op een andere manier doet maakt niets uit.
Je hebt gelijk, het zou ook ervoor kunnen.
Oke, bedankt. Dat moet wel gaan lukken!
Quote:
Let heel goed op: real_escape_string is geen wondermiddel.Of je dat nou met real_escape_string, checkdate of op een andere manier doet maakt niets uit.
Ik gebruik bijvoorbeeld geen quotes om getallen in queries. Dan is het gebruik van real_escape_string niet genoeg. De passage:
EDIT: Zonder de [] dan, anders krijg ik een 403 Forbidden error als ik deze code probeer te plaatsen? LMAO.
bevat geen karakters die real_escape_string escaped.
Zou je dus je query als volgt opstellen:
dan biedt dit geen bescherming tegen SQL-injectie als $_GET['id'] bovenstaande passage bevat!
Sommige mensen denken slim te zijn (maar in feite zijn ze gewoon lui) en doen dit:
Code (php)
1
"SELECT * FROM whatever WHERE id = '".mysqli_real_escape_string($link, $_GET['id'])."'"
Sure, de injectie is nu niet meer mogelijk, maar dit is de verkeerde oplossing voor het probleem. De uiteindelijke query is syntactisch wel juist (althans, deze vorm wordt geaccepteerd door MySQL maar je zou je kunnen afvragen waarom je een getal behandelt als string), maar als je invoer geen positief geheel getal bevat dan zal je query sowieso nooit resultaat opleveren.
Als je invoer van een bepaald formaat verwacht, controleer hier dan op, en doe anders niets (lees: voer anders de query in het geheel niet uit).
Hier geldt wederom de aloude regel: filter input, escape output.
Gewijzigd op 05/03/2015 15:12:50 door Thomas van den Heuvel