sql >> Database >  >> RDS >> Mysql

PHP:While-lus werkt niet na het aanpassen van SELECT voor preventie van SQL-injectie

U kunt geen kolom- en tabelnamen binden, alleen gegevens. U moet de tabel specificeren en vervolgens binden voor uw '%calendar weekday%' .

$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);

Als u dynamische tabel-/kolomnamen wilt gebruiken, moet u de minimale whitelisting van die items uitvoeren. U kunt een dynamische witte lijst maken door de database te vragen welke kolommen geldig zijn voor een bepaalde databasetabel. Bijvoorbeeld:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`

U kunt al deze informatie in arrays plaatsen en vervolgens controleren of de tabel-/kolomnamen die in de query worden gebruikt, in de arrays staan. Er moet extra aandacht worden besteed aan tabel- en kolomnamen en zorg ervoor dat er geen sleutel/gereserveerde woorden worden gebruikt voor deze namen.

Gebruik ten slotte backticks rond de gevalideerde tabel-/kolomnamen bij het aanroepen van de waarden voor de dynamische query's. Dit dekt eventuele wijzigingen in de lijst met sleutelwoorden/gereserveerde woorden en biedt een extra beschermingslaag.




  1. Taal voor SQL-gegevensmanipulatie

  2. Datum / Tijdstempel om op te nemen wanneer een record aan de tabel is toegevoegd?

  3. Hoe verander ik een PostgreSQL-tabel en maak ik een kolom uniek?

  4. pdo afbeelding direct in database invoegen - altijd BLOB invoegen - 0B