sql >> Databasteknik >  >> RDS >> Mysql

PHP / MySQLi:Hur man förhindrar SQL-injektion på INSERT (koden fungerar delvis)

I Ny PHP-kod utdrag är du fortfarande sårbar för injektioner.
Du använder ett förberett uttalande i insatsdelen, men du använder faktiskt inte preparatets styrkor korrekt.

När du skapar ett förberett uttalande skapar du en fråga där du lägger till platshållare istället för råvärdena:

$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");

Frågetecknen är platshållarna och ersätts senare med bind_param metod:

$stmt->bind_param('ss', $email, $pw);

ss en del av bindanropet berättar för mysql db att dess två strängar som skickas till databasen (s för string , jag för int etc).
Du binder en param ($name ) men den har ingen platshållare eller någon typ av referens i frågan..?

Din select-sats å andra sidan är fortfarande osäker och öppen för sårbarheter.
Jag skulle förmodligen använda ett förberett uttalande där, precis som med infogningsdelen.

Du vill alltid se till att indata från användaren är "säker" för databasen, om du sammanfogar en frågesträng och lägger till användarinmatning i den, kommer databasen inte att undkomma strängarna, den kommer bara att köra den.

Använd bara standard query metodanrop när du skriver hela frågan själv, utan några ingångsparametrar, och speciellt inga indataparametrar som användaren godkänt!



  1. Skapa en Multi-Statement Table-Valued Function (MSTVF) i SQL Server

  2. Visa SQL-fråga för kontroller

  3. Hur man förstår statistik för spårningsfiler i Oracle. Såsom CPU, förfluten tid, fråga ... etc

  4. MySQL - Ta bort vissa specifika tabeller från Big Database