Der er to meget vigtige ting, du skal gøre for at undgå alvorlige sikkerhedsproblemer.
-
Du skal undslippe brugerinput, før du sætter det i din SQL-forespørgsel. Escape betyder at undslippe alle specialtegn såsom
'; Heldigvis er der en funktion, der allerede gør det automatisk:mysql_real_escape_string .Hvis du ikke undslipper brugerinput, kan der ske grimme ting. Forestil dig, at din forespørgsel er
INSERT INTO userdata VALUES ('$user_data'). Forestil dig nu, at brugeren skrev'; DROP DATABASE userdata;.Hvis du ikke undslipper det, bliver din forespørgsel:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;'). Som du kan forestille dig, er dette ikke godt:Hvis du har aktiveret flere sætninger, kan du kysse farvel til din database. Dette kaldes en SQL-injektion angreb. -
Når du udsender din variabel til brugeren, skal du også korrekt erstatte HTML-specialtegn med HTML-enheder. Heldigvis er der også en funktion til at gøre det:htmlspecialchars() . Det vil transformere de specielle HTML-tegn såsom
<til<.Dette ser ud til at være et problem, der ofte undervurderes, men i virkeligheden er det meget alvorligt. Forestil dig, hvis
$user_dataindeholder<script>SomeNastyScript()</script>. Det kan udnytte eksisterende sårbarheder i dine brugeres browser, eller det kan sende en ikke-HTTPOnly-cookie (der kan indeholde gemte adgangskoder) til angriberen, eller det kan narre brugeren til at skrive deres adgangskode på en formular, der er genereret gennem manipulation af DOM (mulig i javascript), eller en masse andre dårlige ting.Dette kaldes XSS (Scripting på tværs af websteder).
Kort version
-
Kald
mysql_real_escape_stringpå strengen, før du indsætter den i din SQL-forespørgsel (men ikke når duechodet). -
Kald
htmlspecialcharspå strengen, før den vises for brugeren (men ikke når du lægger den i databasen).