sql >> Database teknologi >  >> RDS >> Mysql

PHP:Mens løkken ikke fungerer efter justering af SELECT til SQL-injektionsforebyggelse

Du kan ikke binde kolonne- og tabelnavne, kun data. Du skal angive tabellen og derefter binde for din '%calendar weekday%' .

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

Hvis du vil bruge dynamiske tabel-/kolonnenavne, skal du udføre den minimale hvidliste af disse elementer. Du kan bygge en dynamisk hvidliste ved at spørge databasen, hvilke kolonner der er gyldige for en given databasetabel. For eksempel:

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

Du kan placere alle disse oplysninger i arrays og derefter kontrollere, at tabel-/kolonnenavnene, der bruges i forespørgslen, er i arrays. Der bør tages ekstra hensyn til tabel- og kolonnenavne, og det skal sikres, at der ikke bruges nøgleord/reserverede ord til disse navne.

Til sidst skal du bruge backticks omkring de validerede tabel-/kolonnenavne, når du kalder værdierne for de dynamiske forespørgsler. Dette vil dække eventuelle potentielle ændringer til listen over nøgleord/reserverede ord og giver et ekstra lag af beskyttelse.




  1. 'CONTINUE' nøgleord i Oracle 10g PL/SQL

  2. opbygning af en dynamisk forespørgsel i mysql og golang

  3. MYSQL:Ligesom metode, lignende ord - men vis ikke det søgte ord

  4. Mysql sorter efter dato, men ignorer år