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

MySQL-injektionsforespørgsel

Det ville det, medmindre du inkluderer enkelte anførselstegn i det postede name , hvilket ville give dig mulighed for at bryde ud af citaterne. Eksempel, indsend navnet som:

' or 1 or '

WHERE-sætningen bliver:

WHERE id = '' or 1 or '';

Dette ville matche og hente alle rækker i tabellen på grund af or 1 en del. Som du kan se, bryder den ud af anførselstegnene for at injicere noget SQL, og derefter går den tilbage i anførselstegnene for at gøre forespørgslen gyldig.

Nej, men hvis det blev udført med mysqli_multi_query så ja, du kan tilføje flere forespørgsler til slutningen.

Generelt ja, men en forberedt erklæring ville være bedre. Brug escaping, WHERE klausul ville blive (ved at bruge mit eksempel ovenfor):

WHERE id = '\' or 1 or \'';

Dette er ikke længere sårbart, fordi anførselstegnene ikke kan brydes ud af, og vil kun matche rækker, hvis name svarer bogstaveligt talt til ' or 1 or ' hvilket naturligvis er usandsynligt.



  1. Mangler højre parentes på Create Table-kommando SQL

  2. Psychopg2 rapporterer pg_hba.conf fejl

  3. Sådan opretter du en ikke-nul kolonne i en visning

  4. Transponer rækker til kolonner i MySQL