sql >> Database >  >> RDS >> Mysql

PHP / MySQLi:SQL-injectie op INSERT voorkomen (code werkt gedeeltelijk)

In de Nieuwe PHP-code fragment, bent u nog steeds kwetsbaar voor injecties.
U gebruikt een voorbereide verklaring in het invoeggedeelte, maar u gebruikt de sterkten van de voorbereidingen niet correct.

Wanneer u een voorbereide instructie maakt, maakt u een query waarin u tijdelijke aanduidingen toevoegt in plaats van de onbewerkte waarden:

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

De vraagtekens zijn de tijdelijke aanduidingen en worden later vervangen door de bind_param methode:

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

De ss een deel van de bind-aanroep vertelt de mysql db dat de twee strings die aan de database worden doorgegeven (s voor string , ik voor int etc).
Je bent een parameter aan het binden ($name ) maar het heeft geen tijdelijke aanduiding of enige verwijzing in de zoekopdracht..?

Je select-statement daarentegen is nog steeds onveilig en staat open voor kwetsbaarheden.
Ik zou daar waarschijnlijk een voorbereid statement voor gebruiken, net als bij het invoeggedeelte.

U wilt er altijd zeker van zijn dat de invoer van de gebruiker "veilig" is voor de database. Als u een queryreeks samenvoegt en er gebruikersinvoer aan toevoegt, zal de database niet ontsnappen aan de tekenreeksen, maar deze uitvoeren.

Gebruik alleen standaard query methode-aanroepen wanneer u de volledige query zelf schrijft, zonder invoerparameters, en vooral zonder invoerparameters die de gebruiker heeft doorgegeven!



  1. mySQL-query:hoe invoegen met UNION?

  2. Waar worden Java-klassen opgeslagen in Oracle?

  3. Een MySQL-cluster maken, met behulp van mysql-server docker-containers, op meerdere servers

  4. Welk kolomtype/-lengte moet ik gebruiken voor het opslaan van een gehasht Bcrypt-wachtwoord in een database?