Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sesje - zabezpieczenie przed ponownym wyk. PHPSESSID
dob
post 17.12.2003, 21:00:46
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.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
tahat
post 17.12.2003, 22:11:06
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.
Go to the top of the page
+Quote Post
scanner
post 17.12.2003, 22:14:53
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...


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
dob
post 17.12.2003, 22:18:10
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:


--------------------
Go to the top of the page
+Quote Post
tahat
post 17.12.2003, 22:38:44
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.
Go to the top of the page
+Quote Post
Bora
post 17.12.2003, 23:34:26
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]
Go to the top of the page
+Quote Post
dob
post 18.12.2003, 19:24:54
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:


--------------------
Go to the top of the page
+Quote Post
Kinool
post 18.12.2003, 23:36:46
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 smile.gif
Go to the top of the page
+Quote Post
noid
post 19.12.2003, 07:27:16
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
Go to the top of the page
+Quote Post
dob
post 19.12.2003, 07:58:27
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 ?


--------------------
Go to the top of the page
+Quote Post
Kinool
post 19.12.2003, 09:37:29
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 smile.gif wydaje mi sie (a jestem tego pewien) ze xforward dziala na proxy a nie na NAT w pakiecie IP wyslanym z servera ktory sluzy do translacji adresow w zaden sposob niema zapisanego IP docelowego (wewnatrz sieci) te informacje sa na serverze dokonujacym transalcji, posiada on tablice wg ktorej potem rozsyla informacje do poszczegolnych klientow w sieci.

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
Go to the top of the page
+Quote Post
jono
post 19.12.2003, 09:56:05
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;}
Go to the top of the page
+Quote Post
dob
post 19.12.2003, 20:32:16
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 smile.gif

Pozdrawiam


--------------------
Go to the top of the page
+Quote Post

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 - 01:47