sql >> Databasteknik >  >> RDS >> Mysql

Bästa sättet att säkra SQL-fråga i PHP

Frågan du har visat i frågan använder inte användarangivna värden så det finns inget fall av SQL Injection utan i ett allmänt fall:-

För det första måste du validera alla användarinmatningen (användarnamn, e-postmeddelanden etc.) innan du använder den i en fråga. Till exempel:- Om du endast har tillåtit alfanumeriska tecken i ett användarnamn, måste du kontrollera om inmatningen verkligen är alfanumerisk eller inte innan du fortsätter att skapa en databasfråga och du måste också kontrollera storleken på alla indata.

Efter det är enligt min mening Prepared Statements det bästa valet för att förhindra SQL-injektion.

Problem med mysql_real_escape_string():-

Eftersom mysql_real_escape_string() escaper tecken enligt standardteckenuppsättning, så är det bättre än addslashes()-funktionen och den sanerar SQL-injektioner som härrör från missbruk av multibyte-teckenuppsättningar , men i en annan artikel här , visas ett lösningsscenario som förklarar att injektion fortfarande kan göras.

Lösning:-

Så det korrekta och bättre sättet att förhindra SQL-injektion är att använda förberedda satser. Det är en teknik där SQL-satser förkompileras innan användarinmatningen (parametrar) infogas och behandlas som återanvändbara SQL-mallar. Så det separerar användarinmatningen från den faktiska SQL-koden och SQL-parsern analyserar aldrig användarinmatningen.

Förutom säkerhet optimerar den också SQL-frågan för hastighet. Det hjälper i fall där du behöver köra samma fråga flera gånger med olika användarinmatningar.

Du kan se PHP-manualen för implementeringsdetaljer.



  1. Använder Workbench för att ansluta till Remote MySQL Server via SSH Tunnel

  2. välja ett specifikt nummer som kolumnvärde i frågan

  3. Postgres datum överlappande begränsning

  4. Vilka kolumner ger generellt bra index?