mysql_query is ook al enigzins beveiligd. Voor zover ik weet doet die namelijk maar een query uitvoeren. Natuurlijk wel gevaarlijk als dat net een drop, delete of truncate actie is, maar dat zou je ook met rechten kunnen beveiligen / afschermen.
Hoe zouden jullie het beveiligen? Heb al zoveel dingen gelezen, stripslashes(), addslashes(), htmlspecialchars(), mysql_escape_string(), mysql_real_escape_string(). Kan iemand mij in een keer duidelijk uitleggen welke hiervan je moet gebruiken of welke hiervan vooral niet? En wat jullie zelf gebruiken, ik snap bijvoorbeeld ook niet waarom de ene zecht stripslashes() en de ander addslashes().
* stripslashes() - Deze heb je niet nodig, deze haalt alleen slashes weg.
* addslashes() - Deze voegt slashes toen, maar is niet bedoeld om SQL injection tegen te gaan.
* htmlspecialchars() - Dit doet iets heel anders (kan je namelijk gebruiken tegen xss), heeft niks met sql injection te maken, het zet tekens als < om naar hun html code en kan eventueel door ENT_QUOTES als 2e parameter mee te geven ook quotes om zetten, maar ook dit is niet bedoeld om SQL injection tegen te gaan. Met name omdat je htmlpecialchars() altijd pas moet uitvoeren als je data uit de database haalt(!) omdat je deze dan eventueel ook nog voor andere dan HTML doeleinden kan gebruiken (denk aan e-mail). Ook is htmlspecialchars niet volledig, [php]htmlentities[/php]() is completer.
* mysql_real_escape_string() - Als je de gewone mysql_* functies gebruikt is dit dé manier om sql injection te voorkomen.
Hierbij moet ik wel vermelden dat als je PHP 5 tot je beschikking hebt het eenvoudiger is prepaired statements te gebruiken ...
?
Onbekende gebruiker
02-07-2007 16:33
Addslashes moet je in het algemeen gebruiken. Als mensen de mogelijkheid hebben om iets in te typen en wanneer dat direct naar de database gaat dan kunnen er ' of " inzitten en addslashes() escaped ze dan (maakt ze onschadelijk) Stripslashes is het omgedraaide van addslashes() en zal dus de toegevogede \ weghalen zodat ze niet meer in de tekst verschijnen. Htmlspecialchars() doet speciale html karakters omzetten in onschadelijke html karakters. Zo wordt bijvoorbeeld & omgezet in & waardoor er dus geen javascripts o.i.d. kunnen worden uitgevoerd. Mysql_escape_string() is ongeveer hetzelfde als addslashes(), omdat deze functie ook de ' of " doen escapen (onschadelijk maken). mysql_real_escape_string() is hetzelfde als mysql_escape_string(), maar iets ??uitgebreider??
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
Ik hoop dat het een beetje duidelijk is. Een aantal functies overlappen elkaar soms een beetje.
Ja zeer duidelijk, maar welke gebruik jij bijvoorbeeld? is alleen addslashes genoeg?
?
Onbekende gebruiker
02-07-2007 16:46
Ik gebruik vooral: mysql_real_escape_string(), omdat het gewoon goed werkt tegen Mysql injection htmlspecialchars(), omdat het die html tags omzet naar onschadelijke html code, zodat er geen javascript (XSS) uitgevoerd kan worden.
EDIT: htmlspecialchras() dan wel bij de output van een query.
htmlspecialchars(), omdat het die html tags omzet naar onschadelijke html code, zodat er geen javascript (XSS) uitgevoerd kan worden.
En vervolgens kom je hopeloos in de problemen wanneer je de gegevens voor iets anders dan html nodig hebt...
htmlspecialchars() gebruik je voor output en nooit en te nimmer op input van de database. Dus bij een echo is het leuk en aardig, maar bij een insert-query bezorg je jezelf vroeg of laat een berg overbodig werk.
Meestal bij het opschonen van input. Dat hoef je dan slechts 1x te doen, daarna is de data veilig te gebruiken.
?
Onbekende gebruiker
02-07-2007 19:24
pgFrank schreef op 02.07.2007 17:46
[quote='GaMer13 schreef op 02.07.2007 16:46'] htmlspecialchars(), omdat het die html tags omzet naar onschadelijke html code, zodat er geen javascript (XSS) uitgevoerd kan worden.
htmlspecialchars() gebruik je voor output en nooit en te nimmer op input van de database. Dus bij een echo is het leuk en aardig, maar bij een insert-query bezorg je jezelf vroeg of laat een berg overbodig werk.
Niet doen dus.[/quote]
Ja, daarbij doe ik dat ook. Bijvoorbeeld bij een self-made-blog of forum o.i.d. Ik zal het er even bij zetten...