Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP:Podczas gdy pętla nie działa po dostosowaniu SELECT w celu zapobiegania wstrzykiwaniu SQL

Nie można powiązać nazw kolumn i tabel, tylko dane. Musisz określić tabelę, a następnie powiązać dla swojego '%calendar weekday%' .

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

Jeśli chcesz używać dynamicznych nazw tabel/kolumn, powinieneś przeprowadzić minimalną białą listę tych elementów. Możesz zbudować dynamiczną białą listę, pytając bazę danych, jakie kolumny są prawidłowe dla danej tabeli bazy danych. Na przykład:

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

Możesz umieścić wszystkie te informacje w tablicach, a następnie sprawdzić, czy nazwy tabel/kolumn użyte w zapytaniu znajdują się w tablicach. Należy zwrócić uwagę na nazwy tabel i kolumn, upewniając się, że dla tych nazw nie są używane żadne słowa kluczowe/zastrzeżone.

Na koniec, podczas wywoływania wartości dla zapytań dynamicznych używaj backticków wokół zweryfikowanych nazw tabel/kolumn. Obejmuje to wszelkie potencjalne zmiany na liście kluczy / słów zastrzeżonych i zapewnia dodatkową warstwę ochrony.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aby używać utf8, czy nie - problem z kodowaniem znaków MySQL i PHP

  2. Jak uzyskać miesiąc używając daty w MySQL?

  3. MySQL - Jak wyszukać dokładne dopasowanie słów za pomocą LIKE?

  4. Zbyt duży rozmiar wiersza w mysql utwórz zapytanie tabeli

  5. Praca z MyISAM w MySQL