sql >> Database teknologi >  >> RDS >> Mysql

PHP sikker brugervariabel

Der er to meget vigtige ting, du skal gøre for at undgå alvorlige sikkerhedsproblemer.

  1. 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.

  2. 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_data indeholder <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

  1. Kald mysql_real_escape_string på strengen, før du indsætter den i din SQL-forespørgsel (men ikke når du echo det).

  2. Kald htmlspecialchars på strengen, før den vises for brugeren (men ikke når du lægger den i databasen).



  1. Online værktøjer til at prøve SQL design og forespørgsler

  2. Opret forbindelse til MySQL-datakilden i PHPStorm

  3. Begræns en sammenkædet server til et enkelt lokalt login (T-SQL-eksempel)

  4. MySQL-udløsere kan ikke opdatere rækker i samme tabel, som triggeren er tildelt. Foreslået løsning?