Задать вопрос
librown
@librown
На-все-руки-мастер и немного кодер

Почему раз в месяц из таблицы БД могут удаляться строки? Как найти дыру?

Приветствую!
У меня есть самописный проект на mysql и php.
Раз в месяц примерно в один и тот же день (+- 1-2 дня) в одной из важных таблиц в БД удаляется часть строк.
Заметил, что это строки из начала таблицы. Всегда одни и те же: с 1 по 3397.
Проверил КРОН - ничего подозрительного не нашел.
Подскажите, куда копать? Как найти "дыру"?
Не имею опыта в этом деле, спасибо!
  • Вопрос задан
  • 666 просмотров
Подписаться 6 Оценить 8 комментариев
Пригласить эксперта
Ответы на вопрос 5
@dredd_krd
Можно проверить код и проанализировать все запросы, начинающиеся с DELETE, и вычислить, при каких условиях в данном коде они могут выполняться так, чтобы совпадало с проявляемой проблемой.
Сами по себе строки удаляться не могут, поэтому их точно что-то удаляет. А раз так, то проблема должна быть где-то на поверхности
Ответ написан
Комментировать
Rodionc
@Rodionc
IT security, SIEM, IDM...
Imho, можно включить журналирование запросов и сразу будет видно кто и каким запросом удалили какие данные -
Ответ написан
Комментировать
вопрос однозначно рассчитан на телепатов...
проверить кроны других пользователей системы, смотреть логи апача, ковырять логику системы
Ответ написан
2ord
@2ord
На мой взгляд, порядок должен быть таким:

1. Сначала нужно знать права доступа всех пользователей к MySQL
select * from information_schema.user_privileges;

2. Чтобы действовать наверняка, стоит сменить пароль пользователя (надеюсь используется не root)
Пользователь БД, который попытается подключиться в очередной раз несанкционированным образом, получит облом.

3. Ограничение доступа пользователям к MySQL
В идеале, пользователь, с которым программа подключается к БД, должен иметь полномочия лишь необходимые для корректной работы. Ограничить можно как по сетевому адресу хоста, указав статический IP адрес, а не маску "%". Также можно ограничить доступ пользователя к MySQL начиная с частной БД (database/schema) до уровня отдельных таблиц и даже колонок.
2.12.4 Securing the Initial MySQL Accounts

4. Как уже посоветовали ранее, нужно найти в программе все запросы DELETE.
В добавок обратить внимание на историю команд в mysql_history

5. Неплохо ещё бы проконсультироваться с экспертами в данной БД.
Ответ написан
Комментировать
@mirzok
Information Security
Первое - это проанализировать логи. Возможно, увидишь запросы, через которые некие злоумышленники пытаются тебя взломать, а результатов является удаление данных. По журналированию запросов выше также дали хороший совет.

Так как проект самописный, то его необходимо обязательно проверять на уязвимости. Как минимум, сканером кода вроде AI-Bolit, и на дыры снаружи с помощью онлайн-инструментов вроде detectify.com, metascan.ru.

Ограничить, конечно же, права на удаление. И сменить на всякий случай доступы, вдруг кто-то периодически заходит к тебе и удаляет данные? ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы