htmlentities er noget man bruger før man udskriver noget tekst på side, for at være sikker på at den fortolkes som tekst, og ikke HTML. Man kan bruge htmlspecialchars i stedet for htmlentities. htmlspecialchars gør det samme som htmlentities, men den er bare hurtigere. Det er vigtigt at brugeren ikke kan skrive HTML på siden, blandt andet for at forhindre, at brugeren kan skrive Javascript på siden og derved snyde andre brugere.
addslashes er noget man bruger, før man indsætter tekst i en SQL query. Man kan bruge mysql_real_escape_string i stedet for, som er mere korrekt, da den tager højde for tegnsæt mm.
htmlspecialchars bruges når man vil udskrive tekst på siden, mysql_real_escape_string bruges når man vil indsætte tekst i databasen. Det vil sige at de to funktioner ikke skal bruges på samme streng, som i Per Sikker Hansens eksempel.
Du skal ikke bruge både md5 og sha1. Vælg en af dem. Det bliver ikke mere sikkert af at bruge dem begge.
Lige i tilfældet med id, vil jeg ikke anbefale at escape din get-variabel. Her bør du i stedet sikre dig, at det er et tal:
$id = (int) $_GET['id'];
Dette sikrer effektivt mod "DROP TABLE artikler;", da dette ikke er et tal.
Et alternativ til mysql_real_escape_string, som jeg personligt bedre kan lide, er prepared statements. Her undgår du fuldstændig problemet omkring sql injection, da du ikke sammensætter queryen af forskellige brugerinput. PHP's mysql_* (
http://php.net/mysql ) og mysqli_* (
http://php.net/mysqli ) har dog ringe understøttelse af prepared statements, så hvis du vil bruge dem, bør du nok skifte til PDO (
http://php.net/pdo ), hvilket kræver PHP 5.1
Indlæg senest redigeret d. 25.03.2007 16:00 af Bruger #3143