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

Bedste måde at sikre SQL-forespørgsel i PHP

Forespørgslen, du har vist i spørgsmålet, bruger ikke brugerleverede værdier, så der er ingen tilfælde af SQL-injektion, men i et generelt tilfælde:-

For det første skal du validere alle brugerens input (brugernavne, e-mails osv.), før du bruger det i en forespørgsel. For eksempel:- Hvis du kun har tilladt alfanumeriske tegn i et brugernavn, skal du kontrollere, om input faktisk er alfanumerisk eller ej, før du fortsætter med at danne en databaseforespørgsel, og du skal også kontrollere størrelsen af ​​alle input.

Derefter er Prepared Statements efter min mening det bedste valg til at forhindre SQL-injektion.

Problem med mysql_real_escape_string():-

Da mysql_real_escape_string() undslipper tegn i henhold til standardtegnsæt, så er det bedre end addslashes()-funktionen, og den renser korrekt SQL-injektioner, der opstår som følge af misbrug af multibyte-tegnsæt , men i en anden artikel her , vises et workaround-scenario, der forklarer, at injektion stadig kan udføres.

Løsning:-

Så den rigtige og bedre måde at forhindre SQL-injektion på er at bruge forberedte sætninger. Det er en teknik, hvor SQL-sætninger prækompileres før indsættelse af brugerinput (parametre) og behandles som genanvendelige SQL-skabeloner. Så det adskiller brugerinput fra faktisk SQL-kode, og SQL-parseren parser aldrig brugerinput.

Udover sikkerhed optimerer den også SQL-forespørgslen for hastighed. Det hjælper i tilfælde, hvor du skal køre samme forespørgsel flere gange med forskellige brugerinput.

Du kan se PHP-manualen for implementeringsdetaljer.



  1. ORDER BY datetime gør forespørgslen meget langsom

  2. SQL SUM() for begyndere

  3. Sådan automatiseres SQL-databasevedligeholdelsesopgaver ved hjælp af SQLCMD

  4. Mysql Datediff-forespørgsel