Witam!
Mam zadanie troche nietypowe. Mam pewny serwis, powiedzmy ze jest to gra przegladarkowa. Ludzie loguja sie i po zalogowaniu dostaja ciasteczka nazwa loginu + md5 hasla. "Polaczenie bezposrednie miedzy dwoma userami" dziala u mnie w sposob taki:
$(document).ready(function() {
aCounter=0;
if (readCookie("login") == null && readCookie("password")==null) return;
sendData(false);
});
Czyli po zaladowaniu strony sprawdzane jest czy user jest zalogowany, jesli jest to :
function composeSendData() {
aCounter++; //zwieksz licznik ?
var data={ "id" : aCounter,
"login" : readCookie('name'),
"password" : readCookie('password'),
"data" : false};
return data;
}
function sendData(send_data) {
var send=composeSendData();
if (send_data != false) { //w momencie kiedy mamy jakies dane do wyslania to kasuj timer...
clearInterval(aTimer);
send['data']=send_data;
}
var data=JSON.stringify(send, json_stringify);
advAJAX.post({
url: "index.php?action=alive",
parameters : {
"data" : data
},
onSuccess : function(obj) {
try {
var response = JSON.parse(obj.responseText, json_parser); //parsuj
if (!response['error']) aTimer=setTimeout('sendData(false)', 1000);
if (response['data'] != false) { //sprawdz czy nie przyszlo cos nowego
parseNewData(response['data']); //wywolaj parser, tutaj serwer przysyla tablice z lista nowych "pakietow"
}
} catch(err) {}
}});
}
Wiec -
- User po zalogowaniu wysyla swoje dane, jesli jest cos do wyslania w zapytaniu to przeslij to w tablicy.
- Sprawdz odpowiedz, jesli serwer ma jakies dane czekajace na usera to wywolaj parser.
- Po otrzymaniu odpowiedzi za sekunde zrób to samo.
Po stronie serwera wyglada to podobnie. Jesli user A wysyla dane do usera B to serwer sprawdza w bazie czy user B wyslal pinga (czyli wyslal wiadomosc) w okresie przynajmniej 30 sekund (to znaczy jest zalogowany), jesli to zrobil to zapisz w kolejce dane ktore mu przesyla user A. User B po wysylaniu swojego pinga dostaje z kolejki liste wiadomosci ktore sa zaadresowane do niego. Proste i dziala...
Problem w tym ze boje sie ze bedzie to latwe do obejscia w jakis sposob. Myslalem o zabezpieczeniach takich ze user po zalogowaniu do strony dostaje swoj unikatowy numer sesji i zapisywane bedzie IP. Przy wysylaniu pingów user musialby podawac wlasnie ten ID sesji + serwer bedzie porownywal IP usera z IP sesji. Przy 'przypadkowym' przechwyceniu sesji i tak atakujacy nic z tym nie zrobi... Z innego adresu IP. Ale jak jest z moim sposobem ?
Praktycznie, po wycieknieciu loginu i hashu hasla atakujacy moze zrobic cokolwiek. Lacznie z zalogowaniem sie na strone.
Pisal ktos kiedys cos podobnego ? Zalezy mi na maksymalnym bezpieczeństwie.