sql >> Database >  >> RDS >> Mysql

De beste manier om SQL-query's in PHP te beveiligen

De query die u in de vraag hebt getoond, gebruikt geen door de gebruiker opgegeven waarden, dus er is geen geval van SQL-injectie, maar in een algemeen geval:-

Ten eerste moet u alle validate valideren de gebruikersinvoer (gebruikersnamen, e-mails enz.) voordat u deze in een query gebruikt. Bijvoorbeeld:- Als u alleen alfanumerieke tekens in een gebruikersnaam hebt toegestaan, moet u controleren of de invoer daadwerkelijk alfanumeriek is of niet voordat u doorgaat met het vormen van een databasequery en u moet ook de grootte van alle invoer controleren.

Daarna is naar mijn mening Prepared Statements de beste keuze om SQL-injectie te voorkomen.

Probleem met mysql_real_escape_string():-

Omdat mysql_real_escape_string() tekens ontsnapt volgens de standaardtekenset, is het dus beter dan de functie Addlashes() en het zuivert SQL-injecties als gevolg van misbruik van multibyte-tekensets , maar in een ander artikel hier , wordt een workaround-scenario getoond waarin wordt uitgelegd dat injectie nog steeds kan worden gedaan.

Oplossing:-

Dus de juiste en betere manier om SQL-injectie te voorkomen, is door voorbereide instructies te gebruiken. Het is een techniek waarbij SQL-instructies worden voorgecompileerd voordat de gebruikersinvoer (parameters) worden ingevoegd en worden behandeld als herbruikbare SQL-sjablonen. Het scheidt dus de gebruikersinvoer van de daadwerkelijke SQL-code en de SQL-parser ontleedt nooit de gebruikersinvoer.

Afgezien van de beveiliging, optimaliseert het ook de SQL-query voor snelheid. Het helpt in gevallen waarin u dezelfde zoekopdracht meerdere keren moet uitvoeren met verschillende gebruikersinvoer.

U kunt de PHP-handleiding raadplegen voor details over de implementatie.



  1. Hoe verbinding maken met MySQL DB als container in docker?

  2. Fout 1215:Kan beperking voor refererende sleutels niet toevoegen

  3. Hoe X- en Y-asgegevens in een SQL-tabel weer te geven?

  4. 'Tijd'-opslaggrootte in SQL Server begrijpen