[ Nemanja Avramović @ 07.12.2006. 18:41 ] @
Pozdrav,
pitanje je prosto, ali rešenje (barem za mene) nije: Dakle, imam dve aplikacije, jedna se vrti na serveru, PHP je u pitanju, a druga je desktop aplikacija (Delphi). Zanima me kako odraditi razmenu podataka (obostranu) između ove dve aplikacije, a da to bude iole sigurno? Recimo iz desktop aplikacije treba da pošaljem nešto web aplikaciji, treba da se ulogujem pre nego što pošaljem podatke, pa ne bih baš da šaljem to običnim post/get zahtevom bez ikakve enkripcije jer bi neko snifferom mogao da pročita informacije o loginu ili podatke koje razmenjuju web i desktop aplikacija.
Do sada se komunikacija svodila na baš jednostavne stvari pa nije bilo potrebe za nekom bezbednosti, ali sada bih voleo da podignem to na neki viši nivo.

p.s. Malo je diskutabilno da li je ova tema trebalo ovde da se nađe, ali zaista je "pola-pola" između PHPa i Delphija, tako da...
[ Miroslav Ćurčić @ 07.12.2006. 21:29 ] @
Ako je prisluškivanje problem onda ti nikakvo logovanje neće pomoći jer uvek postoji rizik da ti neko preotme sesiju ili nešto slično.
Čini mi se da je najčistije rešenje da se odmah vrši POST transfer cele datoteke (važi za oba pravca) koja je naročito kodirana, a da prijemnik to pokuša dekodirati pa ako ustanovi da je validna onda je i upotrebi za dalji rad.
Poenta je kako izvršiti kodiranje, ali svaki put na drugi način da se nebi mogla reprodukovati šema.

Uobičajno je da se za te stvari koristi "plivajući kod", tj ključ po kojem se kodira svaki bajt datoteke, a koji je svaki put drugačiji, samo je algoritam kojim on utiče na sadržaj uvek isti.
E sad treba u završni paket ubaciti i sam ključ da bi ga prijemnik upotrebio ali ne u sirovom obliku već je i on kodiran, ali ovaj put standardnim načinom.
Takođe ne bi trebalo da ga ubacuješ uvek na isto mesto u paket nego recimo ovako:
- kreiraš random broj za položaj tog ključa
- insertuješ ključ na taj položaj u datoteku
- na fixno mesto u tom paketu ubaciš integer sa vrednošću tog položaja
[ Miroslav Ćurčić @ 07.12.2006. 21:44 ] @
Sasvim je druga stvar ako sam sadržaj komunikacije nepredstavlja neku tajnu nego je samo bitno sprečiti napadača da reprodukuje/simulira saobraćaj i podatke.
Tada se može koristiti slanje posebno sklepanog ključa koji je prikačen uz sadržaj a čiju validaciju vrši prijemnik.
Recimo često se koristi varijanta:
do {
$kljuc= GenerišiSlucajniKljuc();
$VecPostoji= PotraziUBaziDaliJeVecKoristen();
} while($VecPostoji);
UbaciUBazuKorištenihKljučeva($kljuc);
$Paket= $kljuc.md5($kljuc.'neki tajni dodatak');

Pošto je $kljuc uvek iste dužine prijemnik zna gde da ga prepolovi, zna koji je tajni dodatak pa će umeti da ponovi ovo hešovanje da bi ga uporedio s originalom.

Smeštanje upotrebljenih ključeva u bazu je korisno za obe varijante da bi se sprečilo reprodukovanje snimljenog saobraćaja. Prijemnik će jednostavno ignorisati sadržaj ako je prisutan već upotrebljen ključ.
[ flylord @ 07.12.2006. 21:45 ] @
pa nadju neku kontrolu (kao to je TIEHTTP) za delphi, I onda ili preko post/get metoda radi. A jos bolja solucija je da to odradis preko web servisa na php strani (i ukljuci ssl)
[ Nemanja Avramović @ 07.12.2006. 22:40 ] @
Meh, ipak to nisu toliko poverljivi podaci
[ Miroslav Ćurčić @ 08.12.2006. 12:56 ] @
Onda ti se zadatak svodi na proveru verodostojnosti pošaljioca podataka.
[ Nemanja Avramović @ 08.12.2006. 18:34 ] @
Hm, ok.
Ali, da li se sama komunikacija dve aplikacije svodi na običan post/get ili je nešto drugo u pitanju?
Naravno, ja mogu to da odradim sa post/get ali me zanima kako se to obično radi?
[ flylord @ 08.12.2006. 20:13 ] @
pa ja ti rekoh. Web servisi sluze za takve primene. Za php4 pogledaj NuSoap biblioteku.
[ Nemanja Avramović @ 08.12.2006. 20:19 ] @
Aham... ok, znači moraću još nešto da proučavam
A za php5 jel ima tako nešto? (pitam čisto informativno)

edit: Ok, našao sam nešto na https://sourceforge.net/search...earch=soft&words=soap+php5
A sad na čitaje