Avatar billede topceres Nybegynder
10. januar 2013 - 12:55 Der er 17 kommentarer og
1 løsning

Session cross domain / logged in cross domain

Halløjsa. Sidder og overvejer hvordan jeg bedst får brugerdata delt cross-domain - altså til et site, som spænder over X forskellige domains men hvor man bl.a. gerne kun skulle logge ind een gang. Andre gemte data måtte også meget gerne forblive...

Cookies ... den tror jeg ikke kan lade sig gøre overhovedet.

Session ... det er her jeg vil tro man vil kunne lave en work around? Har kigget på at store session data i en tabel. Og det kunne lade sig gøre, men at the end of the day ... tror jeg faktisk ikke jeg vinder noget ved det, for jeg vil stadig skulle identificere hvilken session ID man kom fra, og så vil jeg nok lige så godt kunne starte session med den tidl. id fra det domain man kommer fra.

Men er den eneste approach så at indsætte session id (htmlspecialchars(SID)) i alle links som linker ud af sitet til et af de andre domains..? Eller er der nogen som har en super approach til dette?

På forhånd tak :-)
Avatar billede topceres Nybegynder
10. januar 2013 - 14:07 #1
Argh ... den er sq lidt for smart.. når jeg sender session_id med URI kaldet fra domain 1 til 2:

FRA www.1.com: www.2.com/index.php?sesid=XXXX

og sætter session_id($_GET[sesid]);

så virker det fint, for så vidt, på den føste side jeg lander på er session_id() = XXXX

... men så snart jeg så bevæger mig videre:

FRA www.2.com: /side2.php

... så viser det sig, at browseren/php eller hvad der styrer det, ikke har accepteret den tvungne session_id jeg har sat den til ... for så er session_id() = YYYYY

Hvordan tvinger jeg den i gulvet og får den til at købe at jeg VIL fortsætte med samme session!?? :-))
Avatar billede topceres Nybegynder
10. januar 2013 - 14:30 #2
Okay, fandt selv svaret til ovenstående. Glemte at starte session på www.2.com når jeg kom fra www.1.com. Troede det var nok at sætte session_id (session_id($_GET[sesid]);) ... men der skulle lige en session_start() til også :-)

Men mit oprindelige spg. står stadig: Er der nogen som har en bedre måde end at jeg skal sende session_id med i alle hrefs som går ud over det eksisterende domain?
Avatar billede arne_v Ekspert
11. januar 2013 - 02:37 #3
Jeg ville ikke sende session id i URL. En session id kan typisk bruges i 10/20/30 minutter og URL'er kan aflaeses.

Put et taelfaeldigt genereret token i URL og naar server 2 modtager dette saa verificerer den med server 1.

Token kan udloebe efter 1/2/3 minutter og kan kun bruges en gang.

Du kan evt. konkatanere med en krypteret version af client IP adresse, saa det kun kan benyttes fra den IP adresse.
Avatar billede topceres Nybegynder
11. januar 2013 - 07:14 #4
Hej Arne, tak for svar. Kan sagtens se din pointe, også i sikkerheds øje med. Men jeg er ikke med på hvordan jeg ellers kan gøre det? Jeg kunne lave en kryptering af nogle kombinationer - sessionid+ip+XXXX - og så dekryptere på den anden måde - men session id skal jeg have med i een eller anden form mener jeg, ellers kan jeg ikke få det til at virke. Er det det, du mener, eller har du et bedre forslag til at fortsætte sessionen fra det andet domain?
Avatar billede arne_v Ekspert
12. januar 2013 - 23:41 #5
Session id skal flyttes mellem serverne ikke via URL.

---

browser requester http://xxxx.dk/foo.php

der skal laves et link til http://yyyy.dk/bar.php

og bar.php skal have session med over

---

foo.php laver link:

<a href="xfer.php?host=yyyy.dk&page=bar.php

bruger clicker paa link

---

xfer.php laver:

genererer 256 bit random token
gemmer time, IP address og token i database
redirect til http://yyyy.dk/bar.php?token=xxxxxxxxxxxxxxxxxxxxxx

---

bar.php laver:

kalder http://xxxx.dk/check.php?token=xxxxxxxxxxxxxxxxxxxxxx&ip=n.n.n.n

hvis OK saa opretter den session og fortsaetter normalt

hvis ikke OK saa aborterer den alt

---

check.php returnerer OK hvis:
- ip og token er i databasen
- time er mindre end 10 sekunder gammelt

---

Saa vil det token som er i URL kun vaere gyldigt i 10 sekunder fra samme IP addresse

Det er meget bedre end at session id er i URL
Avatar billede topceres Nybegynder
14. januar 2013 - 06:55 #6
Hej Arne, tak for forklaring. Kan godt se sikkerheden i det. MEN ... kan ikke se, hvordan man overfører session_id? Gemmer xfer.php også den i tabellen sammen med token og ip? Og så sender du token med som _GET-var i URL'en i stedet?

Det er lidt tungt, ikke at lave men for brugeren synes jeg - med redirects mv. I stedet kunne man vel kryptere session_id'en og sende direkte i URL, kunne man ikke? Så mangler man det med, at den udløber. Det kunne man evt. acceptere som en mindre sikkerhedsrisiko? Eller ... kunne man ikke også smide det (udløbstidspunkt) med i URL'en, på en "kryptisk" måde? :-) Så slap man for både redirect og databaseaction..?

Så kommer der en helt anden tanke op .. hvad vil google synes om alt dette? Den vil vel få en masse unikke links til sider, som ellers er ens..... :-(
Avatar billede arne_v Ekspert
14. januar 2013 - 15:09 #7
xfer.php kan udover OK status ogsaa returnere en session id (selvom jeg ikke lige kan se pointen i at genbruge denne), username, shoe size etc..
Avatar billede arne_v Ekspert
14. januar 2013 - 15:10 #8
Da google ikke kan logge ind, saa er alt dette vel ikke saa relevant for google??
Avatar billede arne_v Ekspert
14. januar 2013 - 15:11 #9
Jeg forstaar ikke helt hvad side 2 skal bruge en krypteret session id til!!
Avatar billede topceres Nybegynder
14. januar 2013 - 15:17 #10
Hej Arne

Citat: "xfer.php kan udover OK status ogsaa returnere en session id (selvom jeg ikke lige kan se pointen i at genbruge denne), username, shoe size etc.. "

Well, hele idéen var jo at fortsætte sessionen så jeg har alle session-vars (incl. login) tilgængelig. Alternativt kunne jeg jo "bare" medsende en form for krypteret kunde-id og logge ind på den anden side igen.

Google. Well, man kan logge ind eller lade være. Så google er "velkommen", og links ville jeg umiddelbart lave ens lige meget om man er logget ind eller ej - altså stadig fortsætte sessionen på den anden side. Så også for Google...

Citat: "Jeg forstaar ikke helt hvad side 2 skal bruge en krypteret session id til!!"

Jamen ... hvis jeg skal fortsætte sessionen så bliver jeg jo vel nødt til at lave en session_id($sessionid) ....?
Avatar billede arne_v Ekspert
14. januar 2013 - 15:24 #11
Hvis du gemmer din session paa shared storage som kan tilgaaes fra begge servere, saa kan du bruge session id til noget. Men goer du det?
Avatar billede arne_v Ekspert
14. januar 2013 - 15:25 #12
Google poster jo aldrig, saa med get only kan jeg ikke se hvad det er du vil have med over.
Avatar billede topceres Nybegynder
14. januar 2013 - 15:31 #13
Well, det ligger faktisk alt sammen på samme server ja (sofar) ... meeeeen, who knows, kunne blive udvidet, så det skal jeg måske ikke lægge an på.

Men jeg testede (usikker) ved blot at sende id'en med som get - og det virkede aldeles fint. Jeg skal så bare have modificeret en masse dynamiske links. Og det er ikke i post, det er "normale" links jeg skal tilføje en parameter...

Det, jeg vil have med over er generelt som du selv siger - user id, shoe size (!) - altså hvad der er gemt af preferencer på site X kan lige så godt også virke på site Y, lettere for brugeren.
Avatar billede arne_v Ekspert
15. januar 2013 - 04:09 #14
Hvis der ikke skal logges ind saa er data naeppe fortrolige og saa kan du bare sende dem over helt normalt med link.
Avatar billede topceres Nybegynder
15. januar 2013 - 06:45 #15
Okay, så hvis vi ikke skeler til sikkerhed men kun til pragmatik, så ville du (også) blot sende session_id med i linket - evt. krypteret for at gøre det lidt bedre?
Avatar billede arne_v Ekspert
16. januar 2013 - 03:32 #16
Hvis det ikke er fortroligt paa nogen maade kan du bare sende id med over.
Avatar billede topceres Nybegynder
16. januar 2013 - 06:28 #17
Well, det kan stadig være lidt "skidt" hvis de forkerte logger ind på en konto.

Men tak for assistancen - mange tak - tror jeg har et billede af hvad mulighederne er nu. Vil opveje fordele og ulemper. På begge måder vil link skulle modificeres kraftigt, og vil på begge måder måske give lidt problemer for google mv. Lets see.

Du må meget gerne smide et svar så jeg kan lukke tråden :-)
Avatar billede arne_v Ekspert
17. januar 2013 - 01:38 #18
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester