Autocomplete, Input filteren, output sanitizen, maar hoe doe je dat bij autocomplete
Ik let er sterk op om de input van gebruikers te filteren. Ik valideer alles voordat een formulier gepost kan worden. Nu heb ik een autocompleteveld, dat werkt perfect. Na het veld check/valideer ik de input. Maar ik vraag mij af welke gevaren op de loer liggen inzake beveiliging bij “autocomplete, omdat je real time gegevens opvraagt uit de database die de gebruiker invoert.. Het veld reageert direct op de input. Wat moet en kan ik doen om hier geen poedel te krijgen? Jullie hier op het forum kennen de bezwaren en haken, ogen. Graag jullie advies.
Ook hier geldt: Je data escapen tegen SQL-injection.
- Ariën - op 14/05/2018 09:04:58:
Ook hier geldt: Je data escapen tegen SQL-injection.
Dank Ariën. Alles dichttimmeren. De autocomplete-functie gebruikt PDO op de juiste wijze, heb ik nu uitgeplozen met prepare etc en zorgen al voor een veiliger systeem. Weer iets geleerd. Dank!
Gewijzigd op 14/05/2018 09:31:21 door Jan te Pas
Het idee van autocomplete is juist dat je de gebruiker geen keuze laat in wat deze (uiteindelijk) invult. Dit doe je voor de gebruiker, dat is het idee van autocomplete.
Het is gewoon zaak dat datgene wat uiteindelijk opgeslagen wordt een geldige waarde heeft. Je zou daartoe nogmaals de invoer kunnen controleren aan de hand van een lijst van toegestane waarden. Hoe dit er verder uitziet hangt van de autocomplete informatie af. Ook toon je ook vaak een andere (voor gebruikers leesbare) waarde dan de daadwerkelijke waarde die je opslaat (bijvoorbeeld een autoincrement id bij een plaatsnaam ofzo).
Dit staat in principe verder los van een veilige omgang met DATA binnen een SQL statement. Dat is een syntactische aangelegeheid (vorm).
Bij de informatie van een autocomplete veld is het zaak dat deze een geldige waarde uit een specifieke set bevat. Wat je opslaat moet voor de tabel/database hout snijden, dus dat is dan meer een semantische aangelegenheid (betekenis).
Thomas van den Heuvel op 14/05/2018 14:04:11:
Het idee van autocomplete is juist dat je de gebruiker geen keuze laat in wat deze (uiteindelijk) invult. Dit doe je voor de gebruiker, dat is het idee van autocomplete.
Dat hoeft niet. Anders kun je (soms) ook gewoon een <select> gebruiken. Meestal gebruik ik een autocomplete om de gebruiker (al tijdens het typen) te laten weten wat er al "bekend" is. Uit de autocomplete lijst kan ie dan snel de juiste keuze maken (minder typen, minder kans op fouten). Als de gebruiker echter zeker te weten iets nieuws/anders in wil voeren, dan kan dat wel. Dat is (mijns inziens) juist het grote voordeel van een autocomplete.
On topic:
De meeste autocomplete "add ons" (zoals bijvoorbeeld die van jQuery) geven je al de mogelijkheid om de "opvraagfrequentie" te beperken (bijvoorbeeld pas als de gebruiker meer dan zoveel milliseconden geen toets meer heeft aangeraakt, en pas vanaf een aantal karakters). Server-side zou je zoiets ook nog kunnen doen. Dus bijvoorbeeld het aantal bevragingen (binnen een sessie) beperken, en het minimum aantal karakters controleren.
Rob en Thomas, dank voor de nuttige toevoegingen. Top! Grote dank.