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 ().
Inhoud
stappen
Deel 1
Begrijp wat SQL-injectie is
$ name = $ _GET [`gebruikersnaam`] - $ query = "SELECT-wachtwoord FROM tbl_user WHERE name = `$ name` "-
$ naam = "admin `OF 1 = 1 - "- $ zoekopdracht = "SELECT-wachtwoord FROM tbl_user WHERE name = `$ name` "-
SELECT-wachtwoord FROM tbl_users WHERE name = `admin` OR 1 = 1 - `
Deel 2
Gebruik mySQLi om voorbereide instructies te maken
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.
$ 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 () -}
$ 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 () -}
$ 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 () -}
- Hoe te leren programmeren in C
- Hoe objectgeoriënteerd programmeren te begrijpen
- Hoe een PHP-script te maken
- Hoe gegevens in SPSS in te voeren
- Hoe een B12-injectie toe te passen
- Hoe injecteer je Depo Provera?
- Hoe om te gaan met een pijnlijke injectie
- Hoe geen pijn te voelen als ze je een injectie geven
- Hoe te bepalen of twee variabelen direct proportioneel zijn
- Hoe een algebraïsche uitdrukking te schrijven
- Hoe polynomen te vermenigvuldigen
- Hoe een injectie te ontvangen
- Hoe een natuurkundig probleem op te lossen
- Hoe systemen van lineaire vergelijkingen van twee variabelen op te lossen
- Hoe de afgeleide van sommige basisfuncties te berekenen
- Symbolen, lijnen en staven gebruiken om verschillende variabelen te vertegenwoordigen
- Hoe u ballonbetalingen in Excel berekent
- Hoe te programmeren met VBScript
- Variabelen hernoemen in Eclipse (Java)
- Hoe een variabele in Java te maken
- Hoe geef ik een injectie aan een kat