Это динамический SQL:
$STH = $DBH -> prepare( "update table1 set " . $update . " where id = :id" ).
Динамический SQL не может быть защищен от SQL-инъекций, кроме как путем проверки входных данных $update
по белому списку утвержденных значений.
Подробнее см. Здесь: Как предотвратить внедрение SQL с динамическими именами таблиц?
Безопасен ли ваш код? (Да)
Ваш код вставляет белый список значений в поля массива и вставляет 1
, если входные данные совпадают, и 0
, если нет.
Я не вижу возможности внедрения SQL-кода, но это похоже на запах кода.
Предложение по очистке кода от запаха
Лично я бы реструктурировал таблицу в:
Simple_settings
---------------
new_id integer auto_increment primary key
user_id integer <<-- optional can be used to check if a user is allowed to alter
the setting.
page_id integer <<-- replaces your id
settingname varchar(20)
onoff boolean
Теперь вы можете обновить таблицу, используя обычный PDO:
UPDATE table1 onoff = :isfieldset WHERE settingname = :dbfield
AND page_id = :id
Если у вас есть несколько настроек, вам придется делать их в цикле, но, по крайней мере, ваш код будет простым, и ваша таблица не будет иметь миллиард столбцов.
В качестве дополнительного бонуса вам не нужно менять расположение столов при изменении количества настроек.
Обратите внимание, что , если злой пользователь вводит свои собственные данные в: dbfield, то update
завершится ошибкой.
Если вы используете это для вставки, остальная часть вашего кода не будет читать эту настройку, так что вы тоже должны быть в порядке.
Осталась одна проблема
Если у вас установлены недействительные флажки (поскольку текущему пользователю не разрешено изменять все настройки) ваш код в настоящее время не проверяет это, если есть какая-то бизнес-логика, вам нужно будет проверить, разрешено ли этому пользователю чтобы войти в эти настройки. Вы можете сделать это с помощью триггера before update
в файле settings_table или использовать (предыдущий / добавленный) select
против таблицы user_allowed_settings
, чтобы увидеть, какому пользователю разрешено устанавливать какие настройки.