![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 0 Dołączył: 3.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Przeglądając sobie bazę własnoręcznie zbudowanego modułu zadziwiła mnie jedna rzecz. Do bazy danych pobieram od każdego użytkownika IP i datę, kiedy wysłał formularz. Wszystkie rekordy są poprawne, po za jednym, gdzie ktoś sobie ustawił IP na własne oraz datę ustawił jako napis tekstowy. Jak to można zrobić? Jak to jest w ogóle możliwe? Czy to zmiana ustawienia komputera czy coś wspólnego z SQL injection? A jeżeli SQL injection to potrzebna jest nazwa zmiennej bądź nazwa tabeli w bazie? Ten post edytował benzulli 13.04.2014, 21:50:47 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Jaki typ kolumny daty? Gdybyś miał typ związany z datą np. date/datetime/timestamp to nie wstawi się zwykłego tekstu tam.
Pokaż linijkę kodu PHP gdzie wstawiasz dane do bazy |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 0 Dołączył: 3.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Typy kolumn to tekst, ciekawi mnie przede wszystkim to jak ktoś to mógł to zmienić. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Co do daty - kolumna typu tekst więc się nie dziw, że można wrzucić tam co się chce.
Możliwości poprawienia: - zmiana na np. datetime i narzucenie użytkownikowi, że może wrzucić datę tylko w tym formacie (walidacja) - jeżeli dopuszczasz różne typy daty, to wybierz kilka możliwych i filtruj Zmień mysql_ na PDO, bo używasz już dinozaura, który oficjalnie został uznany za przestarzały i zostanie wycofany z użytku. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 112 Pomógł: 0 Dołączył: 3.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Użytkownik nie może nic wrzucać bo to pole jest hidden i automatycznie się wpisuje.
Jeżeli chodzi o weryfikację, to mógłbym użyć preg_match, ale najbardziej interesuje mnie jak ktoś mógł sobie to zmienić Co do pdo to dzięki, sam dopiero zaczynam i widzę, że jednak będę musiał się z tym zapoznać. Ten post edytował benzulli 13.04.2014, 22:58:34 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat Użytkownik nie może nic wrzucać bo to pole jest hidden i automatycznie się wpisuje. To można zmienić np. w firebugu. Datę generuj w zapytaniu |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 4 Dołączył: 11.08.2010 Skąd: Inowrocław Ostrzeżenie: (10%) ![]() ![]() |
Co do daty - kolumna typu tekst więc się nie dziw, że można wrzucić tam co się chce. Możliwości poprawienia: - zmiana na np. datetime i narzucenie użytkownikowi, że może wrzucić datę tylko w tym formacie (walidacja) - jeżeli dopuszczasz różne typy daty, to wybierz kilka możliwych i filtruj Zmień mysql_ na PDO, bo używasz już dinozaura, który oficjalnie został uznany za przestarzały i zostanie wycofany z użytku. PDO to przerost formy nad treścią, używaj mysqli, prostsza składnia (niemal to samo co mysql) i wygodniejsza w używaniu. Co do problemu to pole data zmień na tym datetime to pierwsza rzecz. Druga jeżeli pole ma zawsze dzisiejszą datę to po czorta ładujesz ją tutaj a nie w samym zapytaniu bezpośrednio? To samo z adresem API. Przecież to adres serwera to po czorta przekazywać to z formularza (IMG:style_emoticons/default/smile.gif) Poniżej gotowiec. Przykład:
Sam sobie tym przekazywaniem robisz krzywdę. Dziwie się że jeszcze portal stoi bo zrobić na tym SQL INJECTION to dziecinada (IMG:style_emoticons/default/smile.gif) Staraj się dane parsować zawsze przez funkcję real_escape_string o której poczytasz sobie w manualach i która jest podstawą zabezpieczenia przed SQL INJECTION. (IMG:style_emoticons/default/smile.gif) Ps. Jeżeli ten formularz leci spoza Twojego serwera to zamiast IP wysyłaj link wysyłającego czyli Refere $_SERVER['HTTP_REFERER']; Ta zmienna zwraca Ci skąd ktoś przyszedł do Ciebie (IMG:style_emoticons/default/smile.gif) Zasada jak wyżej z adresem IP (IMG:style_emoticons/default/smile.gif) Ten post edytował Prezi2907 23.04.2014, 19:47:09 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat PDO to przerost formy nad treścią, używaj mysqli, prostsza składnia (niemal to samo co mysql) i wygodniejsza w używaniu. To ze nie umiesz uzywac i nie rozumiesz o co biega, nie znaczy ze to przerost formy nad trescia (IMG:style_emoticons/default/wink.gif) Cytat Druga jeżeli pole ma zawsze dzisiejszą datę to po czorta ładujesz ją tutaj a nie w samym zapytaniu bezpośrednio? A po czorta w ogole ją generowac w php? zamiast twojego data='".date("Y-m-d H:i:s")."'" mozna zrobic tak: data=now() Cytat Sam sobie tym przekazywaniem robisz krzywdę. Dziwie się że jeszcze portal stoi bo zrobić na tym SQL INJECTION to dziecinada No niestety twoj kod tez jest podatny na sqlinjection... o prosze, tutaj:Staraj się dane parsować zawsze przez funkcję real_escape_string o której poczytasz sobie w manualach i która jest podstawą zabezpieczenia przed SQL INJECTION. ip='".$_SERVER['REMOTE_ADDR']."' albo tutaj: $_SERVER['HTTP_REFERER']; , wg. Twojego pozniejszego pomyslu |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:23 |