Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Znikające dane z tabeli w bazie danych
Forum PHP.pl > Forum > Przedszkole
Gość
Co jakiś czas usuwają mi się wszystkie dane w jednej tabeli w bazie danych (struktura tabeli zostaje, tylko wszystkie dane są opróżniane). Pierwsze co mi przychodzi na myśl, to SQL Injection. Czy można to jakoś sprawdzić? Czy jest możliwość przeanalizowania historii zapytań SQL jakie były wykonywane na danej tabeli (nie wiem, może jakiś istnieje jakiś log przechowujący takie informacje)?
No bo jeżeli nie SQL Injection, to jaki może być inny powód usuwania się danych z tabeli?
Rafał Dudziński
1. Zmień dostępy i zobacz co się będzie działo, sprawdź uprawienia użytkowników do DB
ew.
2. Sprawdź czy jakaś funkcja w projekcie nie wykonuje zapytania truncate lub delete na tej tabeli
3. Sprawdź czy nie ustawiłeś crona na jakiś skrypt
Gość
ad 1. Na PDO?
ad 2. Nie
ad 3. Nie

W przypadku tej tabeli nie zabezpieczałem się przed SQL Injection - używam tradycyjnego dostępu do bazy danych w PHP, nawet bez wykorzystania żadnych funkcji "filtrujących" zapytania, ponieważ w zapytaniach, które wykonuje na tej tabeli (odczytywanie danych za pomocą SELECT) nie ma żadnych parametrów, które pochodziły by od użytkownika. Czy w takim przypadku SQL Injection na tej tabeli jest w ogóle możliwe? Czy jest to możliwe przez inne, niezabezpieczone zapytania, które dotyczą innych tabel, a zawierają w sobie parametry pochodzące od użytkownika?
freemp3
Cytat
Czy jest to możliwe przez inne, niezabezpieczone zapytania, które dotyczą innych tabel, a zawierają w sobie parametry pochodzące od użytkownika?

Jak najbardziej. Sprawdź wszystkie zapytania do bazy i odpowiednio je zabezpiecz, najlepszym rozwiązaniem będzie użycie PDO.

Dane z tabeli są kasowane w regularnych odstępach czasu czy nie ma żadnej reguły? Możesz przy każdym zapytaniu, w którym są przekazywane jakieś dane od użytkownika dodać mechanizm logów, który by zbierał to co jest podawane oraz jak wygląda wygenerowane zapytanie. Dodatkowo jeśli w którymś z zapytań znajdziesz ciąg znaków delete lub truncate możesz zapisać jakieś dodatkowe informacje np adres ip, zawartość tablic post oraz get itp.
Gość
Cytat(freemp3 @ 22.11.2013, 12:24:30 ) *
Dane z tabeli są kasowane w regularnych odstępach czasu czy nie ma żadnej reguły?


Raczej w nieregularnych i zdarza się to rzadko, tak chyba raz na miesiąc, dwa miesiące.

Cytat(freemp3 @ 22.11.2013, 12:24:30 ) *
Możesz przy każdym zapytaniu, w którym są przekazywane jakieś dane od użytkownika dodać mechanizm logów, który by zbierał to co jest podawane oraz jak wygląda wygenerowane zapytanie. Dodatkowo jeśli w którymś z zapytań znajdziesz ciąg znaków delete lub truncate możesz zapisać jakieś dodatkowe informacje np adres ip, zawartość tablic post oraz get itp.


Czy są do tego jakieś specjalne funkcje MySQL?
A może takie logi zapytań MySQL cały czas istnieją i są gdzieś przechowywane na serwerze, wystarczy tylko je odczytać?
freemp3
Myślałem bardziej o użyciu PHP do tego. Mógłbyś od razu zablokować zapytanie, w którym pojawią się słowa delete lub truncate.

Jeśli chcesz użyć mysql tutaj jest opisane jak można to zrobić:
http://stackoverflow.com/questions/303994/...ueries-in-mysql
http://stackoverflow.com/questions/6479107...mysql-query-log
Rafał Dudziński
Możesz ustawić uprawnienia na userów w DB i wyciąć odpowiednie.
Jednak najpierw radził bym przeszukać projekt w poszukiwaniu miejsc gdzie odwołujesz się do tej tabeli.
W większości IDE masz możliwość automatycznego wyszukiwania w całym projekcie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.