Vinnaren i pepparkakshustävlingen!
2016-03-09, 12:23
  #1
Medlem
Lord_Autos avatar
Jag lagrar en variabel($namn_input) från en textbox och kör sedan följande kod:
Kod:
$query_Insert = "INSERT INTO tabellnamn (namn) VALUES('$namn_input')";

Om jag istället skriver i textboxen:
Kod:
blabla; Drop table tabellnamn;
Så raderas INTE tabellen. Vilket är bra iofs, men det borde den ju göra?
Det lagras heller inte något i tabellen som också är konstigt.
Vad händer med detta query-kommandot egentligen?

Sitter med en användares anslutning som har alla rättigheter att göra detta.
Citera
2016-03-09, 12:26
  #2
Medlem
Är det MySQL du går emot? Om, vilket klientbibliotek använder du?
Citera
2016-03-09, 12:30
  #3
Medlem
Lord_Autos avatar
Citat:
Ursprungligen postat av AVGASBARN
Är det MySQL du går emot? Om, vilket klientbibliotek använder du?
MySQL, yes.
Databasens klientversion: libmysql - mysqlnd 5.0.11-dev - 20120503
Citera
2016-03-09, 13:02
  #4
Medlem
Du svarar rätt, jag som ställer fel fråga

Vilket PHP-api (extension) använder du?
Citera
2016-03-09, 13:37
  #5
Medlem
Lord_Autos avatar
Citat:
Ursprungligen postat av AVGASBARN
Du svarar rätt, jag som ställer fel fråga

Vilket PHP-api (extension) använder du?
PHP-tillägg: mysqli
PHP-version: 5.6.16
Citera
2016-03-09, 16:52
  #6
Medlem
vtcs avatar
Tänk på att du befinner dig i ett scope som måste avslutas med ') för att ett nytt kommando ska kunna initieras.

Fundera över injektioner i stil med
-- på slutet gör att resten av raden tolkas som en kommentar; se https://dev.mysql.com/doc/refman/5.7/en/comments.html

Du förhindrar lämpligen SQL-injektioner genom att använda prepared statements.
Citera
2016-03-09, 18:04
  #7
Medlem
Lord_Autos avatar
Citat:
Ursprungligen postat av vtc
Tänk på att du befinner dig i ett scope som måste avslutas med ') för att ett nytt kommando ska kunna initieras.

Fundera över injektioner i stil med
-- på slutet gör att resten av raden tolkas som en kommentar; se https://dev.mysql.com/doc/refman/5.7/en/comments.html

Du förhindrar lämpligen SQL-injektioner genom att använda prepared statements.

Queryn ser ut:
Kod:
"INSERT INTO tabellnamn (namn) VALUES('INMATNING')";

Med inmatningen: hmm'); drop table tabellnamn;--

Så Ger det:
Kod:
"INSERT INTO tabellnamn (namn) VALUES('hmm'); drop table tabellnamn;--')";


Men tabellen raderas ändå inte....Samt att INGET lagras i tabellen i detta fallet.
Verkligen jättekonstigt...
Citera
2016-03-09, 18:59
  #8
Medlem
vtcs avatar
Citat:
Ursprungligen postat av Lord_Auto
Queryn ser ut:
Kod:
"INSERT INTO tabellnamn (namn) VALUES('INMATNING')";

Med inmatningen: hmm'); drop table tabellnamn;--

Så Ger det:
Kod:
"INSERT INTO tabellnamn (namn) VALUES('hmm'); drop table tabellnamn;--')";


Men tabellen raderas ändå inte....Samt att INGET lagras i tabellen i detta fallet.
Verkligen jättekonstigt...
I sådana fall antar jag att du ej tillåter flera statements att köras genom samma query-sträng. Är du säker på att du använder multi_query eller mysql_multi_query?

https://dev.mysql.com/doc/apis-php/e...statement.html
https://dev.mysql.com/doc/apis-php/e...lti-query.html
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback