Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Witam. Posiadam dość dużą stronę internetową. Osób online jest czasami ponad 200.
Strona jest pisana przeze mnie w php, zawiera dużo formularzy. Użytkownicy mogą sobie dodawać usuwać i wyświetlać informacje/rekordy zapisane w bazie mysql. Od jakiegoś czasu użytkownicy skarżą się, że znikają im dane zapisane w bazie. Na stronie jest system tworzenia logów który zapisuje każdy ruch i akcję wykonaną na stronie. W logach nie ma żadnej informacji, że ktokolwiek coś usunął. Wczoraj ze strony zniknęło kilka długich artykułów - dodatkowo dostęp do formularza który służy do usuwania tych artykułów posiadam tylko i wyłącznie ja tak więc nikt inny nie mógł ich usunąć. Pisałem do administracji hostingu i dostałem odpowiedź, że rekordy w bazie nie mogą się same usuwać i mój skrypt jest prawdopodobnie podatny sql injection. Podczas pisania skryptu zastosowałem różne zabezpieczenia, adslashes, warunki sprawdzające czy user ma odpowiednie prawa i czy treść którą chce usunąć należy do niego itp. Dziwi mnie sytuacja z artykułami ponieważ tylko ja fizycznie mogę je usunąć. Dziwne jest też też to, że logi nie rejestrują tych operacji tak więc wydaje mi się, że rekordy nie są usuwane przez stronę/skrypt tylko jakoś z zewnątrz. Czy ktoś może spotkał się z podobną sytuacją? Zupełnie nie wiem czego to może być przyczyna. Proszę o pomoc. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
A blokowania tabel używasz? Transakcji?
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Witam. Nie nie używam ani blokowania ani transakcji ale jeżeli myślisz, że to może być rozwiązaniem problemu to już biorę się za te zabezpieczenia.
Usuwanie rekordów zaczęło nasilać się coraz bardziej... Na początku chciałbym blokować tabele z użytkownikami lecz nie na stałe a w taki sposób aby można było dokonywać SELECT lecz UPDATE byłby zablokowany. Czy gdy użytkownik chce edytować swój profil tabela zawsze musi być odblokowywana? Blokowanie całej tabeli może być chyba niedobre gdy użytkowników jest kilka tysięcy? Proszę o pomoc. Ten post edytował denis94 23.02.2011, 22:10:49 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 33 Dołączył: 18.10.2010 Skąd: Katowice Ostrzeżenie: (0%)
|
a może ktoś po prostu ma dostęp do bazy, skoro wywołanie każdej akcji ma odkładać się w logach i nie ma sladu po tym.
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Ta opcja jest najmniej prawdopodobna ponieważ nikt inny nie zna hasła użytkownika bazy i jest ono długie zawierające male jak i duze litery oraz cyfry.
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 33 Dołączył: 18.10.2010 Skąd: Katowice Ostrzeżenie: (0%)
|
wiesz, ja jeśli bym widziała że mi znika z bazy coś, wszystkie akcje które operują na danych z bazy były odkładane w logach, pierwsze co bym zrobiła to bym zmieniła hasło. Tak na wszelki wypadek ;o)
inna sprawa, czy w formularzach stosujesz ukryte id tych artykułów? Czy tuż przed wykonaniem operacji w bazie jest dodatkowe sprawdzenie uprawnień usera do danego wpisu? |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Niestety w logach nic nie ma. Hasło zostało już zmienione kilka razy.
Gdy użytkownik chce edytować artykuł, przed wyświetleniem formularza jest sprawdzane czy artykuł należy do niego oraz po wysłaniu POST również. Nie tyczy się to tylko "artykułów" ponieważ znikają także użytkownicy a nikt nie posiadający praw/konta administratora nie może ich usunąć. Szukam w internecie coraz więcej informacji o mysql injection lecz zastosowałem już sporo zabezpieczeń. Czy baza może "zwariować"? Czy istnieje opcja, że gdy baza zawiera sporo tabel i rekordów może zacząć "mylić" zapytanie SELECT z DELETE? (tak wiem, ze to pytanie jest dziwne ale głowię się z moim problemem od dawna i nic...) |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 33 Dołączył: 18.10.2010 Skąd: Katowice Ostrzeżenie: (0%)
|
nie przypominam sobie żadnej sytuacji nawet książkowej aby baza zwariowała ;o)
ale skoro znikają nie tylko artykuły, ale również wpisy w innych tabelach, to jedyne na co to może wyglądać to sql injection. byc może to coś niecoś też rozjaśni i pomoże. http://niebezpiecznik.pl/post/przewodnik-p...eveloperow-php/ Ten post edytował kokers 23.02.2011, 23:07:54 |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Dziękuję, skorzystałem trochę z prezentacji. Niektóre z zabezpieczeń tam pokazanych miałem zastosowanych już wcześniej.
Przyszedł mi jeszcze jeden pomysł do głowy. Mam ustawionego crona na skrypt który co 10 minut wyszukuje z pośród kilku tysięcy rekordów te, spełniające warunek WHERE a następnie je edytuje i wykonuje UPDATE. To wszystko w pętli for. Czy możliwe jest, że ten skrypt może powodować usuwanie danych? Atak sql injection wydaje się coraz mniej prawdopodobny ponieważ rekordy nie znikają jakoś równomiernie tylko np raz w tygodniu poleci 100 rekordów a potem jest kilka dni spokoju i znów... Próbowałem samodzielnie dokonać ataku sql injection na moją stronę lecz nie udało mi się to nawet zmieniając dane post w locie. W każdym formularzu jest addlsahes, mysql_escape_string oraz valint (jeżeli potrzeba). Jeżeli można już wykluczyć atak poprzez formularz zamieszczam cały skrypt który jest uruchamiany przez crona, może zrobiłem w nim jakiś głupi błąd którego nie potrafię odnaleźć. (tak wiem, bałagan w kodzie ale działa prawidłowo) Skrypt sprawdza wszystkie APLIKACJE. Jeżeli APLIKACJA ma STATYSTYKI=1 to wtedy wtedy skrypt sprawdza czy w tabeli STATYSTYKI znajduje się dj o nazwie $dj. Jeżeli istnieje to go edytuje dodając mu 10 minut. Jeżeli go nie ma to go utworzy i doda mu 10 minut.
Czy ograniczenie czasowe w skrypcie może mieć takie skutki? Proszę o pomoc. Ten post edytował denis94 28.02.2011, 16:57:23 |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 33 Dołączył: 18.10.2010 Skąd: Katowice Ostrzeżenie: (0%)
|
poza tym, że skrypt działa dla statystyki > 0 a nie =1 to nie widzę, aby on mógł powodowac kasowanie się kilkuset rekordów. Same selecty, updatey, inserty, dane updejtowane czy insertowane są z bazy, więc osobiście nie widze powodu, żeby ten skrypt był przyczyną.
niemniej jednak jeśli nie widzi się innej przyczyny to chyba jedynym rozwiązaniem nie wiedząc o co chodzi, gdzie chodzi etc jest coś ala: http://stackoverflow.com/questions/303994/...ueries-in-mysql Nie wiem tylko czy masz dostęp do wyciągnięcia tych logów. |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%)
|
Dzięki za odpowiedź.
Niestety pisałem już do administracji hostingu z prośbą o udostępnienie logów zapytań do bazy lecz dostałem odpowiedź, że takie logi nie są zapisywane ponieważ w bardzo szybkim tempie zajęły by ogromną ilość miejsca na dysku. |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 14:38 |