Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmiana automatycznych danych
benzulli
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Turson
post
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
Go to the top of the page
+Quote Post
benzulli
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


  1. $ajpi = addslashes($_POST['ajpi']);
  2. $data = addslashes($_POST['data']);
  3.  
  4. $ins = @mysql_query("INSERT INTO slowo SET cytat='$cytat', autor='$autor', ip='$ajpi', data='$data'");


  1. <input type="hidden" name="ajpi" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>">
  2. <input type="hidden" name="data" value="<?php echo date("Y-m-d H:i:s"); ?>">


Typy kolumn to tekst, ciekawi mnie przede wszystkim to jak ktoś to mógł to zmienić.
Go to the top of the page
+Quote Post
Turson
post
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.
Go to the top of the page
+Quote Post
benzulli
post
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
Go to the top of the page
+Quote Post
Turson
post
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
Go to the top of the page
+Quote Post
Prezi2907
post
Post #7





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


Cytat(Turson @ 13.04.2014, 23:37:11 ) *
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:
  1. $m = new mysqli("localhost" , "root" , "pass", "dbName");
  2.  
  3. $m->query("INSERT INTO slowo SET cytat='".$m->real_escape_string($cytat)."', autor='".$m->real_escape_string($autor)."', ip='".$_SERVER['REMOTE_ADDR']."', data='".date("Y-m-d H:i:s")."'");


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
Go to the top of the page
+Quote Post
nospor
post
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
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.
No niestety twoj kod tez jest podatny na sqlinjection... o prosze, tutaj:
ip='".$_SERVER['REMOTE_ADDR']."'
albo tutaj: $_SERVER['HTTP_REFERER']; , wg. Twojego pozniejszego pomyslu
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:23