cross domain access policy solution using cross origin resource sharing

Post on 15-Dec-2014

2.066 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Cross Domain Access Policy solution using Cross Origin Resource sharing

TRANSCRIPT

Breaking The Cross Domain Breaking The Cross Domain BarrierBarrierBreaking The Cross Domain Breaking The Cross Domain BarrierBarrier

Alex SextonAlex Sexton

A Story...A Story...

AJAX is so nifty!AJAX is so nifty!

We can do anything!We can do anything!

FML :(FML :(

Same Origin PolicySame Origin PolicyApplies to XMLHTTPRequestsApplies to XMLHTTPRequests

Stops hackers from getting our data!Stops hackers from getting our data!

Same Origin PolicySame Origin PolicyIt’s actually an important rule. You It’s actually an important rule. You wouldn’t want to have this happen:wouldn’t want to have this happen:

Same Origin PolicySame Origin PolicyIt’s actually an important rule. You It’s actually an important rule. You wouldn’t want to have this happen:wouldn’t want to have this happen:

YEA BUT WHAT IF...YEA BUT WHAT IF...

I own both sites and I just want to make them I own both sites and I just want to make them talk?talk?

The site I want information from says it’s okay?The site I want information from says it’s okay?

I don’t give a shit?!I don’t give a shit?!

The SolutionThe Solution

Post Message.Post Message.

THE END.THE END.

kthnxbai.kthnxbai.

<RecordScratch.wav><RecordScratch.wav>

Browser Vendors have realized that there is a Browser Vendors have realized that there is a need for cross domain messaging.need for cross domain messaging.

IE6 ruins your life again and again.IE6 ruins your life again and again.

There is not a single solution that solves every There is not a single solution that solves every problem in every browser :(problem in every browser :(

Some OptionsSome OptionspostMessagepostMessage

JSONPJSONP

CORSCORS

document.domain modsdocument.domain mods

window.name Transportwindow.name Transport

Server-Side ProxyServer-Side Proxy

CRAZY IFRAME STUFFCRAZY IFRAME STUFF

MOARMOAR

Post MessagePost MessageJust pass messages between window objects!Just pass messages between window objects!

It’s safe(ish) because both pages have to know about It’s safe(ish) because both pages have to know about it.it.

Post MessagePost MessageHandle the message event in the otherWindowHandle the message event in the otherWindow

Post MessagePost Message

Passing events along from one window to the Passing events along from one window to the otherother

Initializing the state of a new windowInitializing the state of a new window

Synchronizing two pagesSynchronizing two pages

Most things, but it’s not always practicalMost things, but it’s not always practical

What’s it good for?What’s it good for?

Post Message Works In...Post Message Works In...

FF3+FF3+

IE8+IE8+

Chrome 1+Chrome 1+

Safari 4+Safari 4+

Kind of in Opera for a while but it’s a little Kind of in Opera for a while but it’s a little different but good enough probably so we’ll different but good enough probably so we’ll count itcount it

JSONPJSONP

JavaScript Object Notation with Padding. JavaScript Object Notation with Padding. (dumb I (dumb I know)know)

JSONENJSONENJavaScript Object Notation Except JavaScript Object Notation Except NotNot

**Formerly JSONP**Formerly JSONP

JSONJSON

A standard (mostly) created by the Crock.A standard (mostly) created by the Crock.

A subset of JavaScript with some extra rulesA subset of JavaScript with some extra rules

Non-Executable - just for dataNon-Executable - just for data

JSONPJSONP

JavaScript...JavaScript...

JSONP - Why it’s specialJSONP - Why it’s special

The ‘P’The ‘P’

<script> tags are not subject to the Same <script> tags are not subject to the Same Origin Policy Origin Policy (A (A totaltotal security flaw that will never change) security flaw that will never change)

How JSONP WorksHow JSONP Works

Step 1: You create a callback function that Step 1: You create a callback function that accepts some dataaccepts some data

How JSONP WorksHow JSONP Works

Step 2: Include a script with a hint of what your Step 2: Include a script with a hint of what your function is called.function is called.

hint-hinthint-hint

How JSONP WorksHow JSONP Works

Step 3: Output a script that calls the function Step 3: Output a script that calls the function and passes in the necessary data.and passes in the necessary data.

JSONP Is Good For...JSONP Is Good For...

Data PassingData Passing

RESTful APIsRESTful APIs

1-(way/time)-ish cross domain communication1-(way/time)-ish cross domain communication

HackingHacking

CORS | Tap the RockiesCORS | Tap the Rockies

Cross-Origin Resource Sharing (CORS) is a W3C Working Draft that defines how the browser and server must communicate when accessing sources across origins.

CORS - HOW?CORS - HOW?

CORS - HOW?CORS - HOW?

Use it or lose itUse it or lose it

CORS - From the CORS - From the Server...Server...

CORS sends along an extra header:CORS sends along an extra header:

Your server must send back another, saying it’s Your server must send back another, saying it’s ok:ok:

CORS - CompatibilityCORS - Compatibility

IE 8+ (most of it, at least)IE 8+ (most of it, at least)

FF 3.5+FF 3.5+

Safari 4+Safari 4+

ChromeChrome

Unrelated GraphUnrelated Graph

CORS - What’s it Good CORS - What’s it Good For?For?

Not working on 40% of the internetNot working on 40% of the internet

Creating an extra http request (usually only Creating an extra http request (usually only once)once)

Custom grouping optionsCustom grouping options

Finer grain control over what’s accessible Finer grain control over what’s accessible Access-Control-Allow-Credentials: true

Straight Up. Cross Domain XHR Straight Up. Cross Domain XHR (yay!)(yay!)

Document.domain Document.domain HackzHackz

Good for allowing Cross Good for allowing Cross SubSubdomain window domain window accessaccess

Now the subdomain has the same permissions for Now the subdomain has the same permissions for accessaccess

Can be very useful even if you don’t own the site, Can be very useful even if you don’t own the site, because subdomains can be cnamed to totally because subdomains can be cnamed to totally different webserversdifferent webservers

Works in all relevant browsersWorks in all relevant browsers

Window.nameWindow.name

HI! I’m Jerry the Window!

HI! I’m Jerry the Window!

Window.nameWindow.nameSuperhacky but safer than jsonp!Superhacky but safer than jsonp!

Works everywhere relevantWorks everywhere relevant

**This is obviously a little simplified**This is obviously a little simplified

Added to Dojo 2 years ago:Added to Dojo 2 years ago:http://bugs.dojotoolkit.org/ticket/6893

Server Side ProxiesServer Side Proxies

Pretty simple concept, only slightly more Pretty simple concept, only slightly more difficult to implementdifficult to implement

mySitemySiteyourSiteyourSite

myServermyServerhttp://benalman.com/projects/php-simple-proxy/

Works everywhere XHR doesWorks everywhere XHR does

Crazy iFrame HacksCrazy iFrame HacksA parent window can’t A parent window can’t readread just about just about anything from a child window (iframe) that is anything from a child window (iframe) that is on a different domain.on a different domain.

A parent window can traverse any known A parent window can traverse any known elements in an iframe though.elements in an iframe though.

A parent window can A parent window can setset properties on the properties on the iframe.iframe.

FACTSFACTS

Crazy iFrame HacksCrazy iFrame HacksA window can read and write properties of an iframe A window can read and write properties of an iframe if it’s on the same domain - EVEN IF it’s inside of if it’s on the same domain - EVEN IF it’s inside of another iframe that isn’t on the same domain!another iframe that isn’t on the same domain!

a.coma.com

b.comb.coma.coma.com

Crazy iFrame HacksCrazy iFrame HacksIf B wants to talk to AIf B wants to talk to A

a.coma.com

b.comb.coma.coma.com

Change the url hash on the innermost iframe to the Change the url hash on the innermost iframe to the messagemessage

/#secret/#secret

Crazy iFrame HacksCrazy iFrame HacksIf B wants to talk to AIf B wants to talk to A

a.coma.com

b.comb.coma.coma.com

Have the top level frame read the message on the Have the top level frame read the message on the hashhash

/#secret/#secret

Crazy iFrame HacksCrazy iFrame Hacks

Poll for hashchange the entire timePoll for hashchange the entire time

Set up iframes to destroy themselves after Set up iframes to destroy themselves after each message and just wait for the load eventeach message and just wait for the load event

Resize the iframe on change, then attach an Resize the iframe on change, then attach an event handler on the resize event that checks event handler on the resize event that checks for new datafor new data

How to know when to receive How to know when to receive datadata

Fast (where it works)Fast (where it works)

Crazy iFrame HacksCrazy iFrame Hacks

Works at varying levels of success via some Works at varying levels of success via some slightly different methods in all relevant slightly different methods in all relevant browsersbrowsers

Unfortunately often our best choice for Unfortunately often our best choice for something that works everywheresomething that works everywhere

Best of both worlds?Best of both worlds?

EasyXDMEasyXDMA library that will use postMessage first and then a series of A library that will use postMessage first and then a series of different techniques based on which browser you use, butdifferent techniques based on which browser you use, butwith normalized syntax.with normalized syntax.

http://easyxdm.net/

Best of Both Worlds?Best of Both Worlds?flXHR / Flash + your own fallbackflXHR / Flash + your own fallback

http://flxhr.flensed.com/

What about cookies?What about cookies?Cookies are insanely easy to Cookies are insanely easy to stealsteal, err.. I mean , err.. I mean share, across domains with these techniques.share, across domains with these techniques.

With the exception of Safari, cookies are passed With the exception of Safari, cookies are passed from the server along with script includes and from the server along with script includes and iframe injection. (You might need some P3P headers iframe injection. (You might need some P3P headers in IE)in IE)

What about cookies in What about cookies in Safari?Safari?

Safari doesn’t send cookies along in scripts and Safari doesn’t send cookies along in scripts and iframes, so there’s nothing to send to the iframes, so there’s nothing to send to the parent.parent.

Unless you ask nicely...Unless you ask nicely...

What about cookies in What about cookies in Safari?Safari?If we post to an iframe it will thank us by sending If we post to an iframe it will thank us by sending

cookiescookies

http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/

Why Cookies?Why Cookies?If I had a network of sites that I wanted to track If I had a network of sites that I wanted to track you across, it would be easy for me maintain a you across, it would be easy for me maintain a central cookie and check for it on every site that central cookie and check for it on every site that you enter that contains my code. you enter that contains my code. (<cough>advertisers</cough>)(<cough>advertisers</cough>)

TotallyNotTrackingYou.comTotallyNotTrackingYou.com

Other SitesOther Sites

Holds your unique cookieHolds your unique cookie

LessonsLessonsWith great cross domain communication With great cross domain communication techniques come great cross domain security techniques come great cross domain security holesholes

Safe and FUN cross-domain communication is Safe and FUN cross-domain communication is possiblepossible

Paul Irish Paul Irish hateshates cold-cuts , cold-cuts , seriouslyseriously

Thanks!Thanks!

Alex SextonAlex Sexton

AlexSexton [at] gmail [dot] comAlexSexton [at] gmail [dot] com

@SlexAxton@SlexAxton

http://yayQuery.comhttp://yayQuery.com

Special Thanks toSpecial Thanks to: yayQuery Peeps, : yayQuery Peeps, BazaarVoice, Aaron Dixon, Shawn Smith, BazaarVoice, Aaron Dixon, Shawn Smith, EasyXDM, flXHR, Mozilla MDCEasyXDM, flXHR, Mozilla MDC

top related