Sådan forhindres SQL -injektion i PHP (med billeder)

Indholdsfortegnelse:

Sådan forhindres SQL -injektion i PHP (med billeder)
Sådan forhindres SQL -injektion i PHP (med billeder)

Video: Sådan forhindres SQL -injektion i PHP (med billeder)

Video: Sådan forhindres SQL -injektion i PHP (med billeder)
Video: Москва слезам не верит, 1 серия (FullHD, драма, реж. Владимир Меньшов, 1979 г.) 2024, Kan
Anonim

Denne wikiHow lærer dig, hvordan du forhindrer SQL -injektion ved hjælp af forberedte udsagn i PHP. SQL -injektion er en af de mest almindelige sårbarheder i webapplikationer i dag. Udarbejdede udsagn bruger bundne parametre og kombinerer ikke variabler med SQL -strenge, hvilket gør det umuligt for en hacker at ændre SQL -sætningen.

Udarbejdede udsagn kombinerer variablen med den kompilerede SQL -sætning, så SQL og variablerne sendes separat. Variablerne fortolkes derefter som blot strenge og ikke en del af SQL -sætningen. Ved hjælp af metoderne i nedenstående trin behøver du ikke at bruge andre SQL -indsprøjtningsfiltreringsteknikker, f.eks. Mysql_real_escape_string ().

Trin

Del 1 af 2: Forståelse af SQL Injection

Trin 1. SQL -indsprøjtning er en type sårbarhed i applikationer, der bruger en SQL -database

Sårbarheden opstår, når et brugerinput bruges i en SQL -erklæring:

$ name = $ _GET ['brugernavn']; $ query = "SELECT password FROM tbl_user WHERE name = '$ name'";

Trin 2. Den værdi, en bruger indtaster i URL -variablen brugernavn, tildeles variablen $ navn

Det placeres derefter direkte i SQL -sætningen, hvilket gør det muligt for brugeren at redigere SQL -sætningen.

$ name = "admin 'ELLER 1 = 1 -"; $ query = "SELECT password FROM tbl_user WHERE name = '$ name'";

Trin 3. SQL -databasen modtager derefter SQL -sætningen som følger:

VÆLG adgangskode FRA tbl_users HVOR navn = 'admin' ELLER 1 = 1 - '

  • Dette er gyldig SQL, men i stedet for at returnere en adgangskode til brugeren, returnerer sætningen alle adgangskoder i tabellen tbl_user. Dette er ikke noget, du vil have i dine webapplikationer.

    Del 2 af 2: Brug af mySQLi til at oprette forberedte erklæringer

    2542820 1
    2542820 1

    Trin 1. Opret mySQLi SELECT -forespørgslen

    Brug nedenstående kode til at VÆLGE data fra en tabel ved hjælp af mySQLi Prepared Statements.

    $ name = $ _GET ['brugernavn']; if ($ stmt = $ mysqli-> prepar ("SELECT password FROM tbl_users WHERE name =?")) {// Bind en variabel til parameteren som en streng. $ stmt-> bind_param ("s", $ navn); // Udfør erklæringen. $ stmt-> execute (); // Hent variablerne fra forespørgslen. $ stmt-> bind_result ($ pass); // Hent dataene. $ stmt-> hente (); // Vis dataene. printf ("Adgangskode til bruger %s er %s / n", $ navn, $ pass); // Luk den udarbejdede erklæring. $ stmt-> luk (); }

    Bemærk: Variablen $ mysqli er mySQLi -forbindelsesobjektet

    2542820 2
    2542820 2

    Trin 2. Opret mySQLi INSERT -forespørgslen

    Brug nedenstående kode til at INSERT data i en tabel ved hjælp af mySQLi Prepared Statements.

    $ name = $ _GET ['brugernavn']; $ password = $ _GET ['password']; hvis ($ stmt = $ mysqli-> prepar ("INSERT INTL tbl_users (name, password) VALUES (?,?)")) {// Bind variablerne til parameteren som strenge. $ stmt-> bind_param ("ss", $ navn, $ password); // Udfør erklæringen. $ stmt-> execute (); // Luk den udarbejdede erklæring. $ stmt-> luk (); }

    Bemærk: Variablen $ mysqli er mySQLi -forbindelsesobjektet

    2542820 3
    2542820 3

    Trin 3. Opret mySQLi UPDATE -forespørgslen

    Brug nedenstående kode til at OPDATERE data i en tabel ved hjælp af mySQLi Prepared Statements.

    $ name = $ _GET ['brugernavn']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> prepar ("UPDATE tbl_users SET password =? WHERE name =?")) {// Bind variablerne til parameteren som strenge. $ stmt-> bind_param ("ss", $ password, $ name); // Udfør erklæringen. $ stmt-> execute (); // Luk den udarbejdede erklæring. $ stmt-> luk (); }

    Bemærk: Variablen $ mysqli er mySQLi -forbindelsesobjektet

    2542820 4
    2542820 4

    Trin 4. Opret mySQLi DELETE Query

    Nedenstående script er, hvordan man sletter data fra en tabel ved hjælp af mySQLi Prepared Statements.

    $ name = $ _GET ['brugernavn']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> prepar ("DELETE FROM tbl_users WHERE name =?")) {// Bind variablen til parameteren som en streng. $ stmt-> bind_param ("s", $ navn); // Udfør erklæringen. $ stmt-> execute (); // Luk den udarbejdede erklæring. $ stmt-> luk (); }

Anbefalede: