Escaping Queries

  • Hallo daar,


    Ik ben de laatste tijd bezig met een nieuw, eigen project. Ik programmeer een eigen php-website, en daar zoek ik natuurlijk veel dingen voor op.


    Nu ben ik bezig met de beveiliging van de website, en met name bij formulieren. Ik weet inmiddels vrij veel over XSS en formulieren controleren, maar ik lees ook zo af en toe iets over het escapen van MySQL queries.


    Ik weet wel hoe het moet, maar ik snap niet goed wat dat doet doet: het escapen van MySQL queries. Kan iemand mij daar wat duidelijkheid over verschaffen?


    Merci!
    - Lodewijk

  • NOOIT USER INPUT VERTROUWEN!!!


    Daar komt het op neer...
    Ga er altijd van uit dat je leden alleen het slechtste met je voor hebben...
    Dus als je user input in een query wilt stoppen moet je deze escapen om te zorgen dat de query onschadelijk is...
    mysql_real_escape_string() (houd rekening met je character set), mysql_escape_string() en addslashes() zijn hier voorbeelden van...

  • Oke, bedankt voor de uitleg.


    Maar op wat voor manier past de functie de user-input dan aan? Of is dat geheim ;) Ik wil altijd graag weten wat een functie dan precies doet, dan kan ik er meestal beter mee werken.. ;)

  • Het zet backslashes voor karakters die een betekenis hebben in een query...
    Hoe het in je database komt te staan zal niet anders zijn dan waarmee je begon (dat is als je niet opeens besluit meerdere functies te gebruiken die het zelfde doen, dan krijg je leuke backslashes in de naam)

  • Als je normaal een SQL query had die er bijvoorbeeld als volgt uit zou zien:
    SELECT id FROM klanten WHERE code = '{USERINPUT}'
    Zou je gewoon {USERINPUT} kunnen vervangen door 1' AND code = '2. Dat betekent dat er nooit een query wordt uitgevoerd en mogelijk wel andere, zodat je bijvoorbeeld meer geld op je bankrekening zou kunnen krijgen. 2 Eén kolom kunnen immers maar één waarde bevatten.


    Zou je het echter beveiligen, dan werd 1' AND code = '2 vervangen door 1\' AND code = \'2, wat zou betekenen dat je SQL server het als 1 waarde leest. Denk eraan dat SQL niet weet wat PHP is, en kan dat dus ook niet zelf beveiligen!

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!