Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> CSRF, bezpieczenstwo
aren
post 6.08.2008, 16:36:55
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 8.03.2007

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


Jak wiemy tagi bbcode etc. np [img] stwarzaja nie male zagrozenie. Jako img moge podstawic plik php i robic co mi sie zywnie podoba (podkrasc cookies, sessje etc.). Chcialbym sie Was polecic jak zapobiec tego typu zagrozeniom? Uzytkownicy maja avatary, wyswietlane na forach, swoich profilach itd. potencjalnie kazdy moglby byc niebezpieczny. Jak wiec zapobiec, czy zablokowac tego typu zagrozenie? Z pewnoscia sprawdzanie czy dany plik graficzny pochodzi z tych bardziej znanych, zaufanych serwisow (np. imagshack itd.) jest jakims rozwiazaniem, ale niewatpliwie uciazliwe dla uzytkownikow, ktorzy nie rzadko wola hostowac pliki u siebie.

Z gory dziekuje za pomoc.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
nrm
post 6.08.2008, 16:58:57
Post #2





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


ja mam sprawdzanie czy to jest obrazek z timeoutem na 2s. Niestety jest to kiepskie rozwiązanie, tymczasówka, która kiedyś przydałoby się zmienic na coś konkretnego więc przypne sie do tematu winksmiley.jpg

ps. kiedyś testowałem chyba z 12 ogólnodostępnych klas do bbcode i wszystkie (exclamation.gif) jak leci nie sprawdzały [img] :/


--------------------
Go to the top of the page
+Quote Post
aren
post 6.08.2008, 17:24:05
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 8.03.2007

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


No wiec wlasnie, wiec jak narazie chyba pozostaje zrobic preg_match...
Go to the top of the page
+Quote Post
kubal
post 6.08.2008, 19:28:51
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 17.06.2008
Skąd: się bierze ten lubieżny uśmiech na Twojej twarzy?

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


nie wiem dokładnie o co wam chodzi (to przez przemęczenie winksmiley.jpg) ale u mnie tag img wygląda tak:
Kod
    // [img]http://www/image.gif[/img]
    $s = preg_replace("/\[img\](http:\/\/[^\s'\"<>]+(\.(jpg|gif|png)))\[\/img\]/i", "<IMG border=\"0\" src=\"\\1\">", $s);

    // [img=http://www/image.gif]
    $s = preg_replace("/\[img=(http:\/\/[^\s'\"<>]+(\.(gif|jpg|png)))\]/i", "<IMG border=\"0\" src=\"\\1\">", $s);

i jest to chyba bezpieczne rozwiązanie...
Go to the top of the page
+Quote Post
nrm
post 6.08.2008, 19:43:12
Post #5





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


o ile jpg jest jpgiem tongue.gif


--------------------
Go to the top of the page
+Quote Post
SirZooro
post 6.08.2008, 20:01:55
Post #6





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Wg mnie przed CSRF nie da się zabezpieczyć inaczej niż przez wyłączenie możliwości linkowania obrazków - przecież można podać link do pliku jpg na innym serwerze, ale próba jego pobrania zaowocuje redirectem na właściwy adres. Jeżeli już koniecznie to chcesz mieć, to pozwalaj na linkowanie tylko obrazków z zaufanych serwerów (np. imageshack), ew. przechowuj obrazki u siebie na serwerze. To ostatnie też nie jest jednak za dobre, bo otwiera drogę do przemycenia kodu php na serwer.


--------------------
Go to the top of the page
+Quote Post
nrm
post 6.08.2008, 20:30:53
Post #7





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@SirZooro: to żadne wyjście z sytuacji, równie dobrze w ogóle można img nie robić. Userzy wklejają adresy skąd popadnie i wcale 10 najpopularnjieszych hostow nie zalatwilo by nawet polowy wklejanych adresow.


--------------------
Go to the top of the page
+Quote Post
.radex
post 6.08.2008, 20:37:19
Post #8





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Wikipedia tyle tylko mówi na ten temat:

Istnieje cały szereg metod, które utrudniają przeprowadzenie skutecznego ataku CSRF.
Hasła jednorazowe uniemożliwiają osobie niepowołanej spreparowanie poprawnego żądania do serwera. Wymóg podania hasła udostępnionego wyłącznie dysponentowi konta na papierowej liście lub tokenie bądź też przesłanego SMSem na numer telefonu komórkowego praktycznie wyklucza powodzenie ataku CSRF. to raczej małej aplikacji nie dotyczy
Im większe konsekwencje dla użytkownika niesie korzystanie ze strony, tym krótszy powinien być okres ważności zalogowania i dopuszczalny czas bezczynności.
Żądania mające skutki uboczne mogą wymagać potwierdzenia, połączonego ew. z ponowną autoryzacją.
Do każdego formularza można dodawać ukryte pole, zawierające liczbę pseudolosową, która musi zostać przekazana wraz z żądaniem wykonania akcji. Ignorowanie żądań, którym brakuje ukrytej wartości bądź gdy nie pokrywa się ona z liczbą zachowaną po stronie serwera, utrudnia spreparowanie ataku.
Zamiast liczby pseudolosowej przesłać można zawartość ciasteczka służącego do uwierzytelnienia i porównać je z wartością przesłaną w nagłówku żądania HTTP oraz tą zapisaną po stronie serwera. Metoda ta opiera swoje bezpieczeństwo na zasadzie same origin policy, która gwarantuje, że wartość ciasteczka dostępna jest jedynie dla skryptów pochodzących z oryginalnej strony. Zwrócić należy jednak uwagę na to, że odpowiednio spreparowany skrypt może zostać umieszczony w serwisie przy pomocy ataku XSS.

Średnio konkretne, ale na pewno przyda się w zabezpieczeniu strony przeciwko atakowi CSRF

EDIT:

@down - Tak, wiem winksmiley.jpg Ale skoro już mówimy o CSRF, to IMHO warto o tym wspomnieć. smile.gif

Ten post edytował radex_p 6.08.2008, 20:42:46


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
nrm
post 6.08.2008, 20:40:09
Post #9





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@radex_p: ale to akurat nie na temat winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Kicok
post 6.08.2008, 20:52:31
Post #10





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat(normanos @ 6.08.2008, 21:40:09 ) *
@radex_p: ale to akurat nie na temat winksmiley.jpg


No ale właśnie takie dodatkowe zabezpieczenia przy wykonywaniu "istotnych akcji" (edytowanie, usuwanie czegoś) przez sprawdzanie referera czy też jakieś losowe ciągi w adresie to jedyny rozsądny sposób. Sprawdzanie zdjęć nic nie da.
Można oczywiście utworzyć białą listę domen, z których można wstawiać zdjęcie, a nawet całkowicie zablokować wstawianie zdjęć z zewnątrz. Jest to skuteczna metoda, ale chyba zbyt irytująca, by mogła być stosowana.

Ten post edytował Kicok 6.08.2008, 20:53:08


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
bełdzio
post 6.08.2008, 22:07:16
Post #11





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


najlepiej uploadować pliki na swoj serwer smile.gif


--------------------
Go to the top of the page
+Quote Post
SirZooro
post 6.08.2008, 23:03:21
Post #12





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


@bełdzio: teoretycznie tak, ale można sobie niechcący przemycić w ten sposób kod php na serwer smile.gif


--------------------
Go to the top of the page
+Quote Post
bełdzio
post 7.08.2008, 08:20:47
Post #13





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


ale można się przed tym zabezpieczyc smile.gif najblizsza notka na blogu u mnie bedzie na ten temat :-)


--------------------
Go to the top of the page
+Quote Post
aren
post 7.08.2008, 08:23:02
Post #14





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 8.03.2007

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


Widzę Panowie, że sporo odpowiedzi. Tak jak niektórzy z Was piszą, nie ma sprawnej metody na zabezpieczenie się przed tego typu wykradaniem danych (mowa głównie o plikach graficznych, które nimi do końca nie są). O tzw. 'białej liście' sam pisałem, ale jest to jak sami wiecie nie bardzo user-friendly. Chciałbym się zapytać, jak to się rozwiązuje w większych aplikacjach? Choćby forum IPB, vBulletin i inne? Przecież nie możliwe jest, że nie ma aplikacji zabezpieczonej odpowiednio.
Go to the top of the page
+Quote Post
SirZooro
post 7.08.2008, 09:19:28
Post #15





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


@bełdzio: zatem czekam - ciekaw jestem co napiszesz smile.gif. Dodam tylko że sprawdzenie rozszerzenia + getimagesize() to za mało.


--------------------
Go to the top of the page
+Quote Post
rzymek01
post 7.08.2008, 10:26:57
Post #16





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


tak jak pisze bełdzio, wysyłanie plików na swój serwer (można się zabezpieczyć przed złośliwym kodem)

lub jak piszesz bezpieczną aplikację typu potwierdzanie akcji, unikalne id w każdym formularzu to niegroźny Ci ten atak tongue.gif


--------------------
:]
Go to the top of the page
+Quote Post
Sh4dow
post 7.08.2008, 10:42:17
Post #17





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


Takie działania można skutecznie utrudniać. Ale chyba jedynie od strony ustawień serwera.
Pierwszy jaki pamietam to ustawienia sesji najprostrze sprawdzanie referera skad przyszło zapytanie.
session.referer_check
Dodatkowo można wymusić uzywanie sesji tylko dla zapytan http a naprzyklad juz nie dla xmlrequestow z JS
session.cookie_httponly
Oczywiście można jeszcze ustawić domene i katalog oraz ssl'a dla ciastek z sesja.
Jeśli natomiast przy obrazkach, nie zalezy ci na transferze oraz miejscu na dyskach , to mozesz takie obrazki zgrywać do ciebie i od siebie je serwować.
Może pomóc również własny system tworzenia ID sesji na podstawie identyfikacji użytkownika, jego ip przegladarka system, jakies dane z ciastek lub inne indywidualne dane użytkownika.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
zimi
post 7.08.2008, 15:19:34
Post #18





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Cytat
@bełdzio: zatem czekam - ciekaw jestem co napiszesz . Dodam tylko że sprawdzenie rozszerzenia + getimagesize() to za mało.

ale mime_content_type" title="Zobacz w manualu PHP" target="_manual, tudzież odpowiedni header" title="Zobacz w manualu PHP" target="_manual dopasowany do rozszerzenia jakie zostało podane... powinno wystarczyć...

edit: tak mi sie wydaję

Ten post edytował zimi 7.08.2008, 15:20:16
Go to the top of the page
+Quote Post
SirZooro
post 7.08.2008, 16:14:23
Post #19





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


@zimi: no to źle Ci się wydaje smile.gif - kiedyś udało mi się umieścić w pliku jpg kawałek kodu php. Dzięki temu można potem tak zrobić:
  1. <?php
  2. include "obrazek.jpg"
  3. ?>

W rezultacie na stronie pojawi się trochę krzaków z pliku i wynik wykonania kodu php (np. wywołanie phpinfo).


--------------------
Go to the top of the page
+Quote Post
zimi
post 7.08.2008, 17:34:49
Post #20





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


nie rozumiem jaką to niesie ze sobą ideę...
ja na swoich stronach obrazki wyświetlam a nie includuję...
nie rozumiem w jaki sposób chciałbyś przeprowadzić atak
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:36