![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 30.01.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam mam pytanie w jaki sposób zabezpieczyc sie przed ponownym wykorzystaniem sesji tj. chciałbym uniknąc tego że ktoś zalogowany może dać 2 osobie link zawierający np. PHPSESSID=bcb3efb7b95ca5c2028d7b1174156ffe, wtedy ta 2 osoba klikając na link też bedzie zalogowana tylko ze ze wszystkimi danymi osoby pierwszej . Napisałem sobie taki kod :
[php:1:8cd3904143]<?php if(!empty($_SESSION['ip'])){ if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip= $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip=$_SERVER['REMOTE_ADDR']; } if($_SESSION['ip']<>$ip){ header("location: ?mode=logout"); exit; } }else{ $_SESSION['ip']=$_SERVER['REMOTE_ADDR']; } if(!empty($_SESSION['user_agent'])){ if($_SESSION['user_agent']!=md5($_SERVER['HTTP_USER_AGENT'])){ header("location: ?mode=logout"); exit; } }else{ $_SESSION['user_agent']=md5($_SERVER['HTTP_USER_AGENT']); } ?>[/php:1:8cd3904143] No i mam jeszcze jakis niedosyt, mam wrazenie że takie zabezpieczenie jednak nie wystarczy. -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Można zawsze pobierać IP osoby wchodzącej na stronę i sprawdzać czy się zgadza z IP osoby, która rozpoczęła sesję, ale to zawsze zajmuje trochę czasu przy wywołaniu strony i jeżeli bardzo zależy na szybkości, to lepiej skorzystać z innej metody.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Ile czasu zajmuje:
[php:1:9447bae8ed]<?php if ($_SESSION['CLIENT_IP'] != $_SERVER['REMOTE_ADDR']) ?>[/php:1:9447bae8ed]Pół godziny? Jesli tak, to ja idę szukac innej metody... -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 30.01.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
POzatym kolega chyba nie zwrócił uwagi na kod który wrzuciłem bo tam własnie jest porównymwane ip wchodzącego na strone z ip zapisanym w sesji (podobnie dla przeglądarki) . Mimo wszystko dzięki tahat za próbe pomocy :wink:
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 6.11.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam, rzeczywiście nie spojrzałem na kod, który podałeś. Pozdrawiam.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
a jakby skorzystać z własnego mechanizmu sesji :
[php:1:bd6f1e42d7]<?php function _read($key) { $qry = "SELECT value FROM session WHERE sesskey = '$key' AND expiry > " . time()." AND ip='$_SERVER[REMOTE_ADDR]'; $qid = mysql_query($qry); if (list($value) = mysql_fetch_row($qid)) { return $value; } return false; } ?>[/php:1:bd6f1e42d7] |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 30.01.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No niby mozna taki numer zrobic zeby zapisywac w bazie dodatkowo czas wygasniecia... ale równie dobrze można to zrobic w sesji np.
[php:1:b2bbbeabb3]<?php $_SESSION['expire']=time()+3600*12; ?>[/php:1:b2bbbeabb3] No i sprawdzac tak jak poprzednie : [php:1:b2bbbeabb3]<?php if(!empty($_SESSION['expire']){ if(time()>$_SESSION['expire'])){ header("location: ?mode=logout"); exit; } }else{ $_SESSION['expire']=time()+3600*12; } ?>[/php:1:b2bbbeabb3] Może jeszcze jakies pomysły ? :wink: -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
wtrace swoje 5 groszy
jesli chodzi o porownywanie z IP to moze byc maly szczegol, w momencie maskowania lub jak kto woli translacji adresu w przypadku gdy ktos udostepnia net ma jeden publiczny IP a np 10 ludzi ma prywatne (w lanie) ale na zewnatrz sa widoczni jako ten jeden wiec moral z tego taki ze czasami pod jednym IP moze byc kilku ludkow ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 8.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
ale tesh sie da wyciagnac wew IP tylko ze serwer proxy musi miec wlaczne take ciuś i kod odpowiedni trzeba miec
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 30.01.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Noid dobra rada ale zobacz w kod (3 i 4 linijka)
Cytat wiec moral z tego taki ze czasami pod jednym IP moze byc kilku ludkow
Dokładnie ja mam taki problem bo pod jednym ip jet około 160 ludków, tak wiec chce sie zabezpieczyc. Ale poza IP, przeglądarką i limitem czasu nic mi juz nie przychodzi do głowy. Może toś jeszcze ma jakes pomysły ? -------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
co do 3 i 4 linijki
nie zawsze udaje sie wyciagnac wewnetrzy adres, to czasmi zalezy od ustawien proxy pozatym takie cudo jak mozilla jest w stanie oszukac (niekiedy) XForward jest tam taki trik jak wstawienie adresu IP jaki ma byc wysylany do proxy. no wlasnie ![]() wiec NAT-owania raczej tym nie przejdziesz mozesz sie pokusic o zbieranie roznych informacji o danym kompie np uzyty sytem czy przegladarka i porownywac to potem (ale podobna konfiguracja bedzie dawala takie same informacje), uzycie wszystkich tych informacji czyli IP rodzaj przegladarki i systemu znacznie zaweza mozliwosc oszukania. jak przyjdzie mi cos do glowy to napisze |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 29.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Możesz zrobić też tak, że do każdego linka dołączasz jakiś unikalny klucz i zapisujesz go do sesji. I teraz przy każdym zalogowaniu zmienia się klucz i na początku kodu sprawdzasz klucz. Jak wejdzie ktoś z innego kompa, to tylko jedna osoba będzie mogła zachować połączenie (ten który pierwszy przeładuje stronę, bo wtedy drugi zostanie ze starym, nieważnym kluczem...)
[php:1:b362dec778]<?php if($_GET['key'] == $_SESSION['key']){ //Ładujesz stronę... $klucz = substr(md5(uniqid(rand(), true)), 5, 5); $_SESSION['key'] = $klucz; echo '<a href=nastepny.php?key='.$klucz.'>'; } ?>[/php:1:b362dec778] To zabezpieczy przed jednoczesnym dostępem przez dwie osoby... Musieli by wymieniać linki przy każdym przeładowaniu... -------------------- if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;} |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 30.01.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat [...]wiec NAT-owania raczej tym nie przejdziesz
mozesz sie pokusic o zbieranie roznych informacji o danym kompie np uzyty sytem czy przegladarka[...] Dokładnie to robie - ja jestem własnie za natem i nie działa X_FOR... dlatego porównuje własnie inne dane które pochodzą od uzytkowników... Jono dzięki za pomysł - przemyśle go sobei dokładnie jutro bo dziś mi cos nmie idzie myślenie ![]() Pozdrawiam -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:47 |