Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP:Докато цикълът не работи след коригиране на SELECT за предотвратяване на инжектиране на SQL

Не можете да свързвате имена на колони и таблици, само данни. Трябва да посочите таблицата и след това да се свържете за вашия '%calendar weekday%' .

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

Ако искате да използвате динамични имена на таблици / колони, трябва да изпълните минималния бял списък на тези елементи. Можете да създадете динамичен бял списък, като попитате базата данни кои колони са валидни за дадена таблица на базата данни. Например:

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

Можете да поставите цялата тази информация в масиви и след това да проверите дали имената на таблица/колона, използвани в заявката, са в масивите. Трябва да се обърне допълнително внимание на имената на таблици и колони, като се уверите, че за тези имена не се използват ключови/резервирани думи.

И накрая, използвайте обратни отметки около валидираните имена на таблица/колона, когато извиквате стойностите за динамичните заявки. Това ще покрие всички потенциални промени в списъка с ключови/резервирани думи и ще осигури допълнителен слой на защита.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Само един ключ от съставен първичен ключ като външен ключ

  2. Как да направите заявка към тази MySQL таблица по най-ефективния начин?

  3. Как да вмъкнете огромен Pandas Dataframe в MySQL таблица с паралелно вмъкване?

  4. MySQL аналог с дълъг текст в Microsoft SQL?

  5. Условно броене на Mysql