sql >> Databasteknik >  >> RDS >> Mysql

MySQL-injektionsfråga

Det skulle det om du inte inkluderar enstaka citattecken i det postade name , vilket gör att du kan bryta dig ur citattecken. Exempel, posta namnet som:

' or 1 or '

WHERE-satsen blir:

WHERE id = '' or 1 or '';

Detta skulle matcha och hämta alla rader i tabellen på grund av or 1 del. Som du kan se bryter den ut ur citattecken för att injicera lite SQL, sedan går den tillbaka till citattecken för att göra frågan giltig.

Nej, men om det kördes med mysqli_multi_query då ja, du kan lägga till flera frågor till slutet.

Generellt sett ja, men ett förberett uttalande skulle vara bättre. Med escaping, WHERE klausul skulle bli (med mitt exempel ovan):

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

Detta är inte längre sårbart eftersom citattecken inte kan brytas ur, och skulle bara matcha rader om name matchar bokstavligen ' or 1 or ' vilket uppenbarligen är osannolikt.



  1. Sequelize.js:Fråga för inte i array ($ne för objekt i array)

  2. Asynkron replikering automatisk failover i MySQL 8.0.22

  3. PROBLEM:Mysql konverterar Enum till Int

  4. Relationsdatabasschema för event sourcing