Тема: autocomplete
Показать сообщение отдельно
  #6 (permalink)  
Старый 18.09.2016, 07:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

htmlspecialchars к безопасности sql-запросов никакого отношения не имеет, а волшебные кавычки надо еще настройками сервера резать на корню. addslashes в рамках mysqli, это анахронизм, mysqli может оперировать подготовленными запросами.
А вот в параметре для LIKE нужно экранировать символы % и _ функцией addcslahes, так как эти символы используются LIKE как спец. символы.

Афишировать же структуру базы данных, именование их таблиц и полей, это табу, ни в коем случае пользователь не должен определять этого, чтобы потом подставлять в запросы.

Если $_GET['q'] определяет параметр поиска, то почему для обращения к таблице и ее полям также не используются GET параметры, а производятся опасные операции оперированием реальной структурой таблицы? Ведь поля таблицы можно задавать в GET параметрах даже их индексами.

Например в таблице есть поля перечисленные в таком порядке - A, B, C, D, то есть под индексами 0 - 3. При этом форма клиента может иметь следующее именование полей расположенных хв таком порядке - field[3], field[0], field[2]. При получении формы нужно отсортировать значения ключа field по ключу, и объединить с массивом имен полей таблицы полученным пересечением по ключу этого массива с массивом полей формы. На выходе получим array(A=>значение, C=>значение, D=>значение).

Если оперировать именами, то клиенту максимум что может быть доступно, это часть имени поля/таблицы, а в запросы подставляется полное имя, как имя от клиента плюс префикс, который известен только серверу.

Последний раз редактировалось laimas, 18.09.2016 в 07:28.
Ответить с цитированием