En weet je nu wat je doet en waarom je het doet? Weet je nu op welke momenten je wel een prepared statement kan gebruiken en op welke momenten niet? Welke extra maatregelen je nog moet nemen? Tegen welke risico's een prepared statement je kan beschermen en tegen welke niet?
Echt, beveiligen van je scripts is niet een kwestie van een paar trucjes uitvoeren en dan ben je veilig. Als dat zo was dan hoefde geen enkele website ooit meer gehackt te worden. Helaas is dat niet zo. Er zijn altijd uitzonderingen en als je die niet weet ben je nog net zo kwetsbaar.
Maar goed, uit je totale gebrek aan serieuze reactie op mijn opmerkingen ga ik ervanuit dat het je blijkbaar geen bal uitmaakt. Prima, dan ga ik verder ook niet aan een dood paard trekken.
Uit de context kan ik afleiden dat ik een prepared statement gebruik als laatste stap om te controleren of een variabele veilig of onveilig is. Wat me nog onduidelijk is, is of de gehele prepared statement de query vervangt of dit nog eens extra moet opgegeven worden.
Ik vind het spijtig dat ik misschien een verkeerde indruk heb opgewekt, maar ik apprecieer zeker uw hulp. Het neemt soms enige tijd voor mij om alles te begrijpen en te combineren met school.
Sven
Een prepared statement is niet de laatste stap om te controleren of de input veilig is. Een prepared statement controleert helemaal niets. Het doel van een prepared statement is om een query al voor te bereiden zonder deze uit te voeren. Zie het als de database laten weten dat er een query aan gaat komen, maar nog zonder te vertellen met welke gegevens. Na het voorbereiden kan je dan de waardes doorgeven aan de database waarbij alles, zonder verdere checks rechtstreeks in de database zal worden gezet.
Het grote voordeel van een prepared statement is dat deze het mogelijk maakt om grote aantallen insert, update of delete acties achter elkaar uit te voeren, met telkens andere data, zonder dat elke keer de query opnieuw hoeft te worden aangemaakt. Heb je dus vele identieke queries achter elkaar dan scheelt dit veel tijd. Voor eenmalige queries is het eigenlijk helemaal niet bedoelt en kost het alleen maar tijd.
Waarom het dan toch wordt aangeraden is omdat een prepared statement een bijkomend voordeel heeft, namelijk dat er door de manier van uitvoeren van de query, geen sql injectie meer mogelijk is. Omdat de query instructies en de data strikt gescheiden zijn, kan een sql injectie poging geen effect hebben op de query instructies. Maar anders dan dat biedt een prepared statement geen enkele beveiliging op andere mogelijke aanvallen. Je gebruikt in je allereerste post bijvoorbeeld htmlspecialchars. Waarom doe je dat? Normaal gesproken doe je dat om jezelf te beschermen tegen XSS of html injectie (en dan niet voor het invoeren in de database, maar na het er weer uithalen). Een prepared statement zal hier niet bij helpen. Hoe ga je dit nu tegengaan, of was je je er uberhaupt wel van bewust dat je dat daarvoor gebruikte?
Daarom: begrijp wat je doet en 'sleur en pleur' niet zomaar code zonder te weten wat het doet en, vooral, wat het niet doet.
U hebt me absoluut duidelijk gemaakt wat prepared statements inhouden. Ik wist ook niet dat htmlspecialchars bij de opgehaalde gegevens toegepast moest worden.
Ik heb in elk geval geleerd minder snel conclusies te nemen ;-).
Ik ben U ook voor deze uitgebreide en duidelijke uitleg zeer dankbaar!