Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 16

Безопасное обновление записи в БД

26.08.2019, 18:36. Показов 672. Ответов 9

Студворк — интернет-сервис помощи студентам
Всем привет, возможно, для кого-то мой вопрос покажется легким, но все-таки я хотел бы узнать варианты решения.
Предположим, у меня есть некая БД, с некой таблицей.
Так же существует страница, позволяющая обновлять записи в этой таблице, что-то вроде
HTML5
1
2
3
4
5
6
<form action='/some_script.php' method='POST'>
<label>Имя: <input type='text' name='firstName' value='Иван'></label>
<label>Отчество: <input type='text' name='middleName' value='Иванович'></label>
<label>Фамилия: <input type='text' name='lastName' value='Иванов'></label>
<input type='submit' value='Обновить'>
</form>
Содержание php скрипта примерно следующее:
PHP
1
2
3
$conn = mysqli_connect(...);
$sql = 'UPDATE USERS SET firstName = `'.$_POST['firstName'].'`, middleName = `'.$_POST['middleName'].'`, lastName = `'.$_POST['lastName'].'` WHERE id = `'.$_POST['id'].'`;
$res = mysqli_query($conn, $sql);
Вопрос в следующем. Как лучше всего передавать Идентификатор обновляемой записи?
Если использовать типичное решение из интернетов, а именно сделать так:

HTML5
1
2
3
4
5
<form>
...
<input type='hidden' name='id' value='10' >
...
</form>
то это получается не совсем безопасно, так как любой может открыть Инспектор Кода в любом современном браузере, изменить значение поля id, игнорируя аттрибут hidden, заполнить поля формы и отправить данные на исполнение и, таким образом, изменять любую запись в этой таблице. Наверняка существуют более безопасные способы обновления записи в таблице, прошу вас поделиться опытом и идеями
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2019, 18:36
Ответы с готовыми решениями:

Безопасное обновление Lookup
Здравствуйте. Передо мной стоит такая задача: получать с сервера данные и преобразовывать их в Lookup, при этом, будет происходить его...

Безопасное обновление конфигурации
Добрый день, подскажите плиииз! (новичку в линуксе) Есть nginx сервер Пока совсем простая конфигурация, но постепенно изучаю новые...

Безопасное хранение файлов или безопасное подключение к БД
Возник такой вопрос. Подключение к БД делаю с помощью include который загружает файл содержащий строку подключения с логином и паролем....

9
39 / 22 / 10
Регистрация: 31.05.2017
Сообщений: 152
26.08.2019, 19:50
nubone, Возможно подход не совсем правильный, но как по мне подобные данные нужно держать строго на сервере, клиенту они и даром не нужны. Как вариант - записывать идентефикатор этой записи в сессию и потом витягивать этот идентефикатор через эту же сессию. Конкретно к вашему случаю стоит на сервер добавить проверку, дабы чужие пользователи не могли изменять данные других пользователей. (Для новостей то же самое можно сделать, например редактировать новость может либо пользователь, который создал её, либо администраторы, всем остальным выдавать 403)
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
26.08.2019, 20:02
Цитата Сообщение от nubone Посмотреть сообщение
так как любой может открыть Инспектор Кода в любом современном браузере, изменить значение поля id, игнорируя аттрибут hidden, заполнить поля формы и отправить данные на исполнение и, таким образом, изменять любую запись в этой таблице.
а вы пробовали, получилось?
а вот это
Цитата Сообщение от nubone Посмотреть сообщение
firstName = `'.$_POST['firstName'].'`, middleName = `'.$_POST['middleName'].'`, lastName = `'.$_POST['lastName'].'` WHERE id = `'.$_POST['id'].'
точно не безопасно
все, что приходит от пользователя, нужно проверять
1
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 16
26.08.2019, 20:52  [ТС]
Это нерабочий пример, просто демонстрация, конечно, лучше записывать все в БД через плейсхолдеры, а не просто извлекая из массива POST. Тут неважно как я добавляю информацию, важно то, как лучше всего передавать идентификатор.

Да, я пробовал изменить его через Инспектор кода и вышло удачно!
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
26.08.2019, 21:19
Цитата Сообщение от nubone Посмотреть сообщение
как лучше всего передавать идентификатор.
тут вопрос в другом
в правах на изменение
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
26.08.2019, 21:46
1) Можно использовать uuid, его сложнее подобрать чем простое число.
2) Проверять права на сервере. У вас же должен быть какой-то признак означающий что юзер может совершить данное действие. Тут может быть много разных вариантов реализации, все зависит от бизнес логики.
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 16
26.08.2019, 22:03  [ТС]
Неужели, кроме как разграничением прав не решить эту задачу? я не против разграничения, просто кажется, что должно быть какое-то решение. Насчет uuid хорошая идея, я тоже подумал о том, чтобы делать идентификаторы неоднозначными, uuid здесь отлично подойдет.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
26.08.2019, 22:40
Цитата Сообщение от nubone Посмотреть сообщение
просто кажется, что должно быть какое-то решение
Нет такого. Всё что приходит от клиента можно подделать, остается только проверять на сервере.
Как вариант еще для каждого клиента развернуть свое приложение со своей БД. Вполне рабочая схема когда клиентов мало.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
26.08.2019, 23:24
Цитата Сообщение от nubone Посмотреть сообщение
Вопрос в следующем. Как лучше всего передавать Идентификатор обновляемой записи?
POST-параметр (значение вашего скрытого поля), GET-параметр (или часть пути), принципиальной разницы нет. Авторизацию нужно проводить и при обработке POST-запросов

Также, естественно, нужна защита от "разрушения" текста запроса поступающими значениями (экранирование, подготовленные запросы и т.п.).

Еще про CSRF-токены почитайте (они обеспечивают дополнительную защиту от соответствующего вида атак).

Добавлено через 8 минут
Цитата Сообщение от nubone Посмотреть сообщение
изменить значение поля id, игнорируя аттрибут hidden, заполнить поля формы и отправить данные на исполнение и, таким образом, изменять любую запись в этой таблице
Если речь о попытке доступа одного пользователя к записи другого, просто проверяйте совпадение идентификаторов пользователей, от имени которого выполняется запрос и которому принадлежит запись.
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 16
26.08.2019, 23:33  [ТС]
Спасибо всем, кто отписался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.08.2019, 23:33
Помогаю со студенческими работами здесь

Связь между таблицами.Обновление одной записи при обновлении другой записи
Всем привет. Делаю БД для курсового проекта. Есть БД сотрудников организаций. Есть таблица &quot;перевод сотрудников&quot; и таблица...

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

Обновление записи
Может кто знает, но почему функция не хочет работать? function my_dsfg() { $currents_users = wp_get_current_user(); $get_max_id =...

обновление записи
есть список узеров....при попытке изменить данные - данные не меняются..... вот функция: &lt;?php function edit_record() { ...

Обновление записи в БД
Доброго времени суток. Есть форма на которой есть несколько полей. Делаю запрос на обновление таблицы в БД. Как организовать проверку на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru