emkiset.ru

Hoe een SQL-injectie in PHP te vermijden

Met deze wikiHow-gids leer je hoe je een SQL-injectie kunt vermijden met behulp van zinnen die zijn opgesteld in PHP. Tegenwoordig zijn SQL-injecties een van de meest voorkomende kwetsbaarheden van webtoepassingen. Gereed-instructies gebruiken gekoppelde parameters en combineren variabelen niet met SQL-strings, waardoor een aanvaller een SQL-instructie niet kan wijzigen.

De voorbereide instructies combineren de variabelen met de gecompileerde SQL-instructies. Op deze manier worden de SQL-instructies en de variabelen afzonderlijk verzonden. De variabelen worden vervolgens geïnterpreteerd als eenvoudige reeksen en niet als onderdeel van een SQL-instructie. Als de methoden van de onderstaande stappen worden toegepast, is het niet nodig om een ​​ander type SQL-injectiefiltertechniek te gebruiken, zoals mysql_real_escape_string ().

stappen

Deel 1
Begrijp wat SQL-injectie is

1
SQL-injectie is een vorm van kwetsbaarheid in toepassingen die gebruikmaken van een SQL-database. Kwetsbaarheden ontstaan ​​wanneer de invoer van een gebruiker wordt gebruikt in een SQL-instructie.
$ name = $ _GET [`gebruikersnaam`] - $ query = "SELECT-wachtwoord FROM tbl_user WHERE name = `$ name` "-
  • 2
    De waarde die de gebruiker invoert in de URL-variabele gebruikersnaam is toegewezen aan de variabele $ naam. Vervolgens wordt het rechtstreeks in de SQL-instructie geplaatst, waardoor de gebruiker de mogelijkheid heeft om de SQL-instructie te bewerken.
    $ naam = "admin `OF 1 = 1 - "- $ zoekopdracht = "SELECT-wachtwoord FROM tbl_user WHERE name = `$ name` "-
  • 3


    Als gevolg hiervan ontvangt de SQL-database de volgende SQL-instructie:
    SELECT-wachtwoord FROM tbl_users WHERE name = `admin` OR 1 = 1 - `
  • Dit is een geldige SQL-instructie, maar in plaats van een wachtwoord voor de gebruiker terug te geven, geeft de instructie alle wachtwoorden in de tabel tbl_user. Niemand wil dat dit gebeurt in uw webapplicatie.
  • Deel 2
    Gebruik mySQLi om voorbereide instructies te maken

    Titel afbeelding 2542820 1
    1



    Maak een SELECT-query met mySQLi.
    Gebruik de onderstaande code om (SELECT) gegevens uit een tabel te selecteren met behulp van een verklaring die is voorbereid met mySQLi.

    $ name = $ _GET [`gebruikersnaam`] - if ($ stmt = $ mysqli->voorbereiden ("SELECT-wachtwoord FROM tbl_users WHERE name =?")) {// Word lid van een variabele met de parameter als string $ stmt->bind_param ("s", $ naam) - // Voer de zin $ stmt- uit>execute () - // Haal de variabelen van de query $ stmt->bind_result ($ pass) - // Zoek de gegevens $ stmt->fetch () - // Geeft de datafrintf weer ("Het wachtwoord% s van de gebruiker is% s n", $ name, $ pass) - // Sluit de voorbereide instructie $ stmt->sluiten () -}


    • Opmerking: de variabele $ mysqli is het verbindingsobject van mySQLi.
  • Titel afbeelding 2542820 2
    2
    Maak een INSERT-query met mySQLi. Gebruik de onderstaande code om gegevens (INSERT) in een tabel in te voegen met behulp van instructies die zijn voorbereid met mySQLi.

    $ name = $ _GET [`gebruikersnaam`] - $ wachtwoord = $ _GET [`wachtwoord`] - if ($ stmt = $ mysqli->voorbereiden ("INVOEGEN IN tbl_users (naam, wachtwoord) WAARDEN (?,?)")) {// Koppel de variabelen aan de parameter als strings $ stmt->bind_param ("ss", $ naam, $ wachtwoord) - // Voer de zin uit $ stmt->execute () - // Sluit de voorbereide instructie $ stmt->sluiten () -}


  • Opmerking: de variabele $ mysqli is het verbindingsobject van mySQLi.
  • Titel afbeelding 2542820 3
    3
    Maak een UPDATE-query met mySQLi. Gebruik de onderstaande code om de gegevens (UPDATE) van een tabel bij te werken met behulp van instructies die zijn voorbereid met mySQLi.

    $ name = $ _GET [`gebruikersnaam`] - $ wachtwoord = $ _GET [`wachtwoord`] - if ($ stmt = $ mysqli->voorbereiden ("UPDATE tbl_users SET-wachtwoord =? WAAR naam =?")) {// Koppel de variabelen aan de parameter als strings $ stmt->bind_param ("ss", $ wachtwoord, $ naam) - // Voer de zin uit $ stmt->execute () - // Sluit de voorbereide instructie $ stmt->sluiten () -}

  • Opmerking: de variabele $ mysqli is het verbindingsobject van mySQLi.
  • Titel afbeelding 2542820 4
    4
    Maak een DELETE-query met mySQLi. De onderstaande code laat zien hoe gegevens uit een tabel kunnen worden verwijderd (VERWIJDEREN) met behulp van instructies die zijn voorbereid met mySQLi.

    $ name = $ _GET [`gebruikersnaam`] - $ wachtwoord = $ _GET [`wachtwoord`] - if ($ stmt = $ mysqli->voorbereiden ("DELETE FROM tbl_users WHERE name =?")) {// Word lid van een variabele met de parameter als string $ stmt->bind_param ("s", $ naam) - // Voer de zin $ stmt- uit>execute () - // Sluit de voorbereide instructie $ stmt->sluiten () -}


  • Opmerking: de variabele $ mysqli is het verbindingsobject van mySQLi.
  • Delen op sociale netwerken:

    Verwant
    Hoe objectgeoriënteerd programmeren te begrijpenHoe objectgeoriënteerd programmeren te begrijpen
    Hoe een PHP-script te makenHoe een PHP-script te maken
    Hoe gegevens in SPSS in te voerenHoe gegevens in SPSS in te voeren
    Hoe een B12-injectie toe te passenHoe een B12-injectie toe te passen
    Hoe injecteer je Depo Provera?Hoe injecteer je Depo Provera?
    Hoe om te gaan met een pijnlijke injectieHoe om te gaan met een pijnlijke injectie
    Hoe geen pijn te voelen als ze je een injectie gevenHoe geen pijn te voelen als ze je een injectie geven
    Hoe te bepalen of twee variabelen direct proportioneel zijnHoe te bepalen of twee variabelen direct proportioneel zijn
    Hoe een algebraïsche uitdrukking te schrijvenHoe een algebraïsche uitdrukking te schrijven
    Hoe polynomen te vermenigvuldigenHoe polynomen te vermenigvuldigen
    » » Hoe een SQL-injectie in PHP te vermijden
    © 2021 emkiset.ru