<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Danny Thorpe &#187; cross-domain</title>
	<atom:link href="http://dannythorpe.com/tag/cross-domain/feed/" rel="self" type="application/rss+xml" />
	<link>http://dannythorpe.com</link>
	<description>Dream &#38; Deliver</description>
	<lastBuildDate>Wed, 18 Jan 2012 00:24:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IE8 Cross-Domain Request Support Demo</title>
		<link>http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/</link>
		<comments>http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 19:55:15 +0000</pubDate>
		<dc:creator>Danny Thorpe</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Access-Control-Check header]]></category>
		<category><![CDATA[cross-domain]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[XDomainRequest]]></category>
		<category><![CDATA[XDR]]></category>
		<category><![CDATA[XmlHttpRequest]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/</guid>
		<description><![CDATA[Adrian Bateman of the IE8 team has posted a video showing how to use IE8&#8242;s new XDomanRequest object to request data from a URL that is not in the current HTML page&#8217;s domain. He also shows how to make an (almost) equivalent cross-domain call in a beta build of Firefox 3.1. This makes use of <a href='http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Adrian Bateman of the IE8 team has posted a video showing <a href="http://blogs.msdn.com/ie/archive/2009/01/14/completing-access-control-support-for-xdomainrequest.aspx">how to use IE8&#8242;s new XDomanRequest object</a> to request data from a URL that is not in the current HTML page&#8217;s domain. He also shows how to make an (almost) equivalent cross-domain call in a beta build of Firefox 3.1.</p>
<p>This makes use of the new Access-Control-Check header that has been inching its way through standards committes for the past few years. It works like this: </p>
<ol>
<li>Script running in the browser makes a request for a URL outside the current document&#8217;s domain</li>
<li>The browser retrieve the requested page and examines the page&#8217;s headers for an Access-Control-Check header.</li>
<li>If the page does not have an Access-Control-Check header, the browser fails the request and the script never sees the data.</li>
<li>If the page has an Access-Control-Check header but the domain(s) listed in the header don&#8217;t match the domain of the document making the request, the browser fails the request and the script never sees the data.</li>
<li>If the domain of the current document matches the domain spec in the Access-Control-Check header, the browser passes the data through to the waiting request in the script.</li>
</ol>
<p>Existing web pages are automatically excluded from cross-domain requests.  That is to say, script can request it and the browser will actually fetch the page, but the script will never see the results.  This is slightly different from how older browsers handle cross-domain requests &#8211; the request is shut down when the browser notices that the requested URL doesn&#8217;t match the current document&#8217;s domain, before anything crosses the wire. </p>
<p>It seems conceivable to me that under this Access-Control-Check scheme, malicious web pages could launch a distributed Denial of Service attack against a particular server using cross-domain requests.  It doesn&#8217;t matter that the script never actually receives the data, the damage has already been done by requesting the page from the target server.  Is there any way for the server to ignore such requests?  I don&#8217;t know.  I&#8217;m sure the standards committees have discussed this at length.</p>
<p>This caveat aside, it&#8217;s exciting to see cross-domain support working its way into the major browsers.  I look forward to tinkering with it in IE8.</p>
<p>Check out the video on Adrian&#8217;s blog post.  You&#8217;ll probably want to <a href="http://ieblog.members.winisp.net/images/XdomainRequest-small.wmv">download the .wmv directly</a> to view it full screen in your local video player, as the video box in the blog post is far too small to see what is going on on the screen and the Flash player doesn&#8217;t appear to provide any way to zoom it up to a more useful size.  Odd.</p>
<p>Found via <a href="http://ajaxian.com/archives/access-control-in-ie-8">Ajaxian</a></p>
<div style="text-align:center;width:100%;"><div style="margin:0px 0px 0px 0px;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-0861479594738165";
/* End of Post */
google_ad_slot = "6510912161";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></div><p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;count=none&amp;text=IE8%20Cross-Domain%20Request%20Support%20Demo" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;count=none&amp;text=IE8%20Cross-Domain%20Request%20Support%20Demo" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fdannythorpe.com%2F2009%2F01%2F15%2Fie8-cross-domain-request-support-demo%2F&amp;title=IE8%20Cross-Domain%20Request%20Support%20Demo" id="wpa2a_4">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://ieblog.members.winisp.net/images/XdomainRequest-small.wmv" length="9822958" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>Cross-Domain Transport with Window.Name</title>
		<link>http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/</link>
		<comments>http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 21:46:44 +0000</pubDate>
		<dc:creator>Danny Thorpe</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[cross-domain]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[window.name]]></category>
		<category><![CDATA[XDR]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/</guid>
		<description><![CDATA[In the fall of 2006 I was wrestling with VS debugging JavaScript in IE and Venkman in Firefox teasing out problems and holes in the cross-domain channel library we were building for Windows Live and the Windows Live Contacts Control. One of the most aggrevating aspects of debugging cross-domain JavaScript is that JavaScript debuggers do not provide the same <a href='http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>In the fall of 2006 I was wrestling with VS debugging JavaScript in IE and <a href="http://www.mozilla.org/projects/venkman/">Venkman</a> in Firefox teasing out problems and holes in the <a href="http://msdn.microsoft.com/en-us/library/bb735305.aspx">cross-domain channel library</a> we were building for <a href="http://www.live.com">Windows Live</a> and the <a href="http://dev.live.com/contacts/">Windows Live Contacts Control</a>.</p>
<p>One of the most aggrevating aspects of debugging cross-domain JavaScript is that JavaScript debuggers do not provide the same degree of omniscience we have come to expect from full-featured desktop application debuggers. The reason is that the debugger operates inside the browser, rather than above the browser.  To evaluate an expression, the debugger has to ask the browser&#8217;s JavaScript engine for the element values, or to evaluate the expression itself. Since the debugger is relying on the browser for evaluation, and the browser has access firewalls all over the place to implement same-domain policy restrictions, the debugger can&#8217;t see anything more than what the JavaScript itself can see.  A debugger attached to the execution context of a top level HTML page can&#8217;t see inside the iframes sitting on that page if the iframes are showing pages from a different domain.</p>
<p>This is fixable, but I doubt that it will ever be fixed. I suspect it would be a major restructuring of the browser code to allow a debugger to circumvent the browser&#8217;s security restrictions and see JavaScript state from all domain contexts concurrently. Even just a casual mention of this idea to Mozilla or Microsoft browser teams draws up such fear in their eyes that you change the subject to avoid someone going postal. I can&#8217;t really blame them &#8211; both browser code bases are huge and hairy, and infamous for inflicting great gouts of pain on well-meaning tinkerers who venture too far into the forest. </p>
<p>Besides, it&#8217;s fair to say that the browser teams&#8217; first priority is data security and safety. Omniscient debugger support is understandably lower on their priority list.</p>
<p>At any rate, while I was poking and prodding my cross-domain experiments trying to get a mental picture of how code reality was diverging from the whiteboard spec, I would occasionally notice an odd artifact out of the corner of my evaluator.  Well, this is JavaScript - odd side effects are the norm. On one of these sorties I noticed that the window.name property was preserved across reloads of an iframe.</p>
<p><em>Now that&#8217;s odd.</em></p>
<p>My tinkering took off on a wild tangent.  Passing a lot of data in one string and round-trip would certainly be faster than doing it in multiple smaller round trips required by fragment identifier messaging (FIM).  However, the more I dug into it the more I found that needed to be chased down.  Frustrated and out of time, I pushed a note onto the &#8220;investigate this further&#8221; queue and forced myself back onto the plan of record.</p>
<p>Fast forward to 2008.  <a href="http://www.sitepen.com/blog/2008/07/22/windowname-transport/">Kris Zyp has implemented a cross-domain transport for the Dojo JavaScript library using window.name.</a> Kudos to Zyp for doing the legwork to turn the window.name oddity into a usable data transport pipe <em>and</em> shore up the holes and security vulnerabilities of the raw technique. </p>
<p>I read his post (discovered via <a href="http://ajaxian.com/archives/windowname-meet-dojoxiowindowname">Ajaxian</a>) with skepticism, armed with an array of  &#8221;Yeah, but what about&#8230;&#8221; challenges and security issues I vaguely recall running into in my late night tangent.  Zyp knocked them all down one by one in his detailed writeup.</p>
<p>Well done!</p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;count=none&amp;text=Cross-Domain%20Transport%20with%20Window.Name" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;count=none&amp;text=Cross-Domain%20Transport%20with%20Window.Name" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fdannythorpe.com%2F2008%2F07%2F28%2Fcross-domain-transport-with-windowname%2F&amp;title=Cross-Domain%20Transport%20with%20Window.Name" id="wpa2a_8">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Silverlight Supports Cross-Domain Calls</title>
		<link>http://dannythorpe.com/2008/06/25/silverlight-supports-cross-domain-calls/</link>
		<comments>http://dannythorpe.com/2008/06/25/silverlight-supports-cross-domain-calls/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 21:23:15 +0000</pubDate>
		<dc:creator>Danny Thorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[cross-domain]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[XDR]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/06/25/silverlight-supports-cross-domain-calls/</guid>
		<description><![CDATA[In getting back up to speed with Silverlight, and in particular the new Silverlight 2 beta 2, I&#8217;ve been surfing through the many quickstart topics on various web sites. While skimming &#8220;Receiving Plain XML Messages with Silverlight&#8221; these words lept out at me: note: The WebClient class does not currently support cross-domain calls. Say what? <a href='http://dannythorpe.com/2008/06/25/silverlight-supports-cross-domain-calls/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>In getting back up to speed with <a href="http://www.microsoft.com/Silverlight/">Silverlight</a>, and in particular the new <a href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx">Silverlight 2 beta 2</a>, I&#8217;ve been surfing through the many quickstart topics on various web sites. While skimming &#8220;<a href="http://www.silverlight.net/Quickstarts/Remote/UsingREST.aspx">Receiving Plain XML Messages with Silverlight</a>&#8221; these words lept out at me:</p>
<blockquote><p><strong>note</strong>: The <span class="nolink">WebClient</span> class does not currently support cross-domain calls.</p></blockquote>
<p>Say what?</p>
<p>The article then proceeds to show how to make an XML call using Silverlight&#8217;s WebClient class, and oh by the way it&#8217;s a cross domain call.</p>
<p>Nice job, guys.</p>
<p>Here&#8217;s what that article probably meant to say, but managed to get lost in the words:</p>
<h3>Silverlight&#8217;s WebClient class supports cross-domain HTTP requests *IF* the target server allows cross-domain requests. </h3>
<p>It really is that simple. </p>
<p>To configure a server to support cross-domain requests, read &#8220;<a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx">How to: Make a Service Available Across Domain Boundaries</a>&#8220;. </p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;count=none&amp;text=Silverlight%20Supports%20Cross-Domain%20Calls" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;count=none&amp;text=Silverlight%20Supports%20Cross-Domain%20Calls" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fdannythorpe.com%2F2008%2F06%2F25%2Fsilverlight-supports-cross-domain-calls%2F&amp;title=Silverlight%20Supports%20Cross-Domain%20Calls" id="wpa2a_12">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/06/25/silverlight-supports-cross-domain-calls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cross-Domain Communication Using Domain Lowering</title>
		<link>http://dannythorpe.com/2007/09/28/cross-domain-communication-using-domain-lowering/</link>
		<comments>http://dannythorpe.com/2007/09/28/cross-domain-communication-using-domain-lowering/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 08:52:28 +0000</pubDate>
		<dc:creator>Danny Thorpe</dc:creator>
				<category><![CDATA[Windows Live Quantum Mechanics]]></category>
		<category><![CDATA[cross-domain]]></category>
		<category><![CDATA[domain lowering]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[subdomain]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[More than a few blog posts ago I stated my intent to publish a series of articles on cross-domain communication techniques.  More time has passed than I had intended, but at last here is the start of that series of articles.  The series will explore progressively more advanced cross-domain techniques as well as their strengths <a href='http://dannythorpe.com/2007/09/28/cross-domain-communication-using-domain-lowering/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p><a href="/2007/06/18/secure-cross-domain-communication-the-architecture-journal/">More than a few blog posts ago</a> I stated my intent to publish a series of articles on cross-domain communication techniques.  More time has passed than I had intended, but at last here is the start of that series of articles.  The series will explore progressively more advanced cross-domain techniques as well as their strengths and weaknesses, culminating in an announcement about stuff we&#8217;ve been working on that I think you&#8217;ll find interesting.</p>
<p>Cross-domain communication is usually discussed in the context of a browser client communicating to a web server that is different than the domain of the web page currently shown in the browser.  The browser client displays a page from server foo.com, and that page tries to access data on server bar.com.  This is forbidden by the same-origin browser security policy because bar.com isn&#8217;t foo.com.</p>
<h4>Server Side Proxy</h4>
<p>One relatively simple way to resolve this is to have the browser page request data from the page&#8217;s web server, and have the web server relay that request to the actual third party server.  The browser displays a page from foo.com, and that page makes a data request to foo.com which foo.com relays to bar.com.  Bar.com replies to foo.com, and foo.com forwards that response on to the browser client page to complete the circuit.</p>
<p>While this solution is simple and quite widespread today, it has some significant problems:</p>
<ol>
<li><strong>Scalability and Network costs</strong>:  The request and response travel across your server&#8217;s network twice.  Request in, request out, response in, response out.  Traffic on your server network grows four times faster than growth of your application use.  That means you&#8217;ll reach network saturation four times sooner than with other techniques, and you&#8217;ll pay four times more (in server network traffic costs) for the privilege.</li>
<li> <strong>Impersonating the user</strong>:  When your foo.com server makes a request to bar.com seeking data for the user, you&#8217;re essentially impersonating the end user.  If the data on bar.com requires any sort of user identification or authorization, your server side proxy suddenly jumps from super simple to super difficult.  It&#8217;s easy enough to ask the user to log in to bar.com, but your foo.com can&#8217;t see anything that goes on in bar.com.  In particular, foo.com cannot see whatever browser cookies that bar.com sets to indicate logged in state.  Thus, it will be next to impossible for foo.com to present the appropriate cookies or credentials in its http request to bar.com to make bar.com believe that the request is coming from the legitimate user.  And this should be difficult &#8211; this is nothing short of a man-in-the-middle attack on bar.com&#8217;s security!</li>
</ol>
<p>So, server side proxies are a quick and dirty way to toss anonymous data around, but they don&#8217;t scale well and they hit a wall when the data requires authentication.</p>
<h4>Web Sites With Subdomains</h4>
<p>Web sites and web applications generally start out as simple beasts running on a single web domain (www.foo.com).  As the site grows in functionality and complexity, the incentives to break that site up into subdomains (downloads.foo.com, feedback.foo.com, images.foo.com) grows as well.  Perhaps your web site has a download area that needs to be optimized for large file transfers.  That would probably be easier to fine tune as a server or cluster dedicated to that function than to try to tune the entire web site for large file downloads.</p>
<p>Subdomains often sprout as a byproduct of a company&#8217;s internal structure.  It takes a lot more effort to coordinate updates to one central server shared by multiple departments on different schedules than for a department to own their own subdomain, nicely isolated from the rest of the company&#8217;s constant revisions.</p>
<h4>Double Edged Sword</h4>
<p>Domain isolation is convenient to let you get your work done independently of the noise going on in the rest of the company&#8217;s web presence, but also presents a new problem:  web pages served from your subdomain cannot share information with web pages served from other subdomains of your company.  If the user logs in to your company&#8217;s main page, the browser cookies representing that login state are not accessible to your subdomain.</p>
<h4>Lowering the Domain Barrier</h4>
<p>The major browsers support a technique around this quandary, to allow subdomains to operate as equals within a common shared context.  The HTML document object has a domain property which normally reflects the complete domain name of the server from which the HTML document was loaded. The browser will allow you to assign a subset of the current domain name to the document.domain property to indicate that you wish for the HTML document to be treated as though it were loaded from the parent domain.</p>
<p>So, an HTML page served from downloads.foo.com can assign document.domain = &#8220;foo.com&#8221; in a JavaScript code block.  From that point forward, browser domain security checks will treat that page as a peer of any page in the foo.com domain.</p>
<p>The browser will (should) only allow you to change the document.domain to a less specific version of your current domain.  one.two.three.foo.com could be lowered to foo.com, or could be lowered to three.foo.com.</p>
<p>The browser should not allow assignment of a top-level domain (domain suffix) to document.domain.  You should not be able to change a document domain from &#8220;one.foo.com&#8221; to &#8220;com&#8221;.  There have been browser bugs in this area in the past where a browser implementer mistakenly interpreted &#8220;top level domain&#8221; to mean &#8220;the bit of the domain after the last dot&#8221;.  &#8220;.com&#8221;, &#8220;.edu&#8221;, and &#8220;.org&#8221; are top level domains, but &#8220;.co.uk&#8221; and &#8220;.co.jp&#8221; are TLDs also.</p>
<p>The browsers will not allow you to raise the domain of an HTML document to something more specific than its domain of origin, nor allow lateral domain shuttling.  Changing document.domain from &#8220;two.foo.com&#8221; to one.two.foo.com&#8221; is forbidden.  Changing a document.domain from &#8221;one.foo.com&#8221; to &#8220;two.foo.com&#8221; is forbidden.</p>
<h4>Irreversible (Mostly)</h4>
<p>Firefox 1.5 and 2.0 will not allow you to assign a domain name that is more specific than the document&#8217;s current domain name under any circumstances.  Once you lower one.foo.com to foo.com, it&#8217;s stuck at foo.com forever.  The only way to clear that state is to reload the page.</p>
<p>IE6 and IE7 will allow you to raise a document&#8217;s domain back to it&#8217;s actual domain of origin.  If a page was served from one.foo.com, and you lower it to foo.com, IE will let you raise it back to one.foo.com.  However, I&#8217;ve seen some instabilities and inconsistencies in the aftermath of &#8220;raising shields&#8221;, so I don&#8217;t recommend relying on this behavior.  Since Firefox doesn&#8217;t allow restoring domains to their original values, you should ignore the fact that IE sort of does allow it.</p>
<h4>Bridging Silos Via Least Common Denominators</h4>
<p>When an HTML document&#8217;s domain is lowered to a parent domain, the security context and JavaScript symbol space of that document joins the security context and JavaScript symbol space of any and all pages that are also in the parent domain.  JavaScript in your page served from one.foo.com and lowered to foo.com can access JavaScript functions and variables defined in other pages whose domain is foo.com, and visa-versa.</p>
<p>So, if you have pages on one.foo.com that would like to interoperate with pages on two.foo.com, you can use domain lowering to pull down the domain barriers just enough to allow them to talk to each other, but still provide domain protections against third parties trying to steal or corrupt the internal state of your web app.  Place a JavaScript block at the top of each page in the &#8220;one&#8221; and &#8220;two&#8221; subdomains which assigns document.domain = &#8220;foo.com&#8221; and you&#8217;re good to go.  All the pages will operate as though they were served from the same domain, and can access anything in each other&#8217;s DOMs and JavaScript symbol space.</p>
<h4>One or the Other, Not Both</h4>
<p>Note that once your one.foo.com page has been lowered into the parent domain, your HTML and JavaScript code loses all access to DOMs and JavaScript data in any other pages that are still in the original one.foo.com subdomain.  A web page can only be in one domain context or the other, not both.</p>
<h4>Interesting Inconsistencies</h4>
<p>Domain lowering applies only to the DOM and JavaScript sandboxes.  Parts (actually, nearly all) of the browser execute in native machine code outside the browser security sandbox. Native objects exposed to JavaScript in the sandbox are largely on their own to implement appropriate security checks on operations initiated by JavaScript.  JavaScript can&#8217;t access the local file system, for example, but if the user installs an ActiveX control for IE or a browser plugin for Firefox that allows local file access, and that extension declares itself safe for scripting, then JavaScript could use that control to access files on the local file system.</p>
<p>In both IE and Firefox, XMLHttpRequest (XHR) is a native object exposed to JavaScript.  This is pretty obvious in IE6 since you have to construct the object using ActiveXObject; in Firefox you can deduce that the XHR is a native object from the phrasing of some error messages and error behaviors while the browser goes down in flames.</p>
<p>XHR is restricted to connecting only to the current HTML page&#8217;s domain of origin.  Domain lowering applies only to the browser sandbox.  XHR operates outside the browser sandbox, enforcing same-origin domain policy on its own. This leads to an interesting &#8211; and valuable &#8211; inconsistency:</p>
<p><strong>XMLHttpRequest is not affected by domain lowering</strong>.</p>
<p>This means you can actually have one foot in each domain:  Your JavaScript executes in the context of the lowered subdomain (foo.com), but XHR requests made by your JavaScript are held to the domain restriction of the page&#8217;s original subdomain (one.foo.com). XHR doesn&#8217;t know anything about document.domain.</p>
<p>If you&#8217;re trying to get your JavaScript to open an XHR to a resource on foo.com, this can be infuriating because XHR won&#8217;t do it.  You have to refer to an HTML page served from foo.com in order to get XHR to open a connection to foo.com.</p>
<h4>The Money Shot</h4>
<p>This inconsistency in the handling of document.domain enforcement/awareness makes the following scenario possible:  The logic of your web app runs in the context of a page loaded from one.foo.com, and you want to XHR load data from two.foo.com.</p>
<p>Here&#8217;s how you do that:</p>
<ol>
<li>Make your html page A served from one.foo.com lower its document.domain to foo.com</li>
<li>Place an html page B on two.foo.com, and have it lower its document.domain to foo.com early in its load cycle.  (A JavaScript statement in global scope in the &lt;head&gt; section is fine).</li>
<li>Implement a function GetData(callback) on this page that constructs an XHR request to load the desired data from two.foo.com.  Wire up the XHR onReadyStateChanged to process the data completion using a function implemented in B.html, and in that function pass the received data to the callback function passed into GetData().</li>
<li>Insert an invisible (1&#215;1 pixel) iframe on page A and set its src to http://two.foo.com/B.html</li>
<li>After page A has fully loaded, and page B in the iframe has loaded, JavaScript code in page A can call the GetData() function in page B through the iframe element:  bframe.window.GetData(mycallback)</li>
</ol>
<p>Believe it or not, this works. Domain lowering allows JavaScript to call between A and B, and the fact that B is served from two.foo.com allows the XHR request implemented in B to access two.foo.com.</p>
<h4>Here Be Pixies.  (Try Not To Piss Them Off)</h4>
<p>The path through this murky realm is neither straight nor wide.  If you take liberties or shortcuts with this recipe, be careful to test your code thoroughly on multiple browsers.  Chances are high that any deviation will lead to failure on one of the browsers.</p>
<p>IE is fairly flexible in this area.  You don&#8217;t actually have to implement the GetData function in the B page.  You can just construct in the A context an XHR object type from the B context and use it directly in the A context.  ( var xhr = new bframe.window.XMLHttpRequest() )  For IE, the B page need only lower the domain to foo.com.  After that, all the driving can be done from A.</p>
<p>Firefox is more particular about this technique.  Firefox will allow you to construct an instance of the B XHR in the context of A, but you&#8217;ll get access denied or weirder errors when you try to call the methods of the B XHR from the context of A.  Firefox gets confused when you call native object methods across these convoluted domain bridges, but calling JavaScript functions and methods works fine on either side of the context boundary.  Once the JavaScript call context gets from A to B, then the native object method calls will work.</p>
<p>This is also why step 3 above mandates that the XHR onReadyStateChange event handler should be wired to a function implemented in the B page &#8211; the native XHR object operating in the B context may have difficulty firing an event wired to a function in the A page context.</p>
<h4>The Downside to Homogeneity</h4>
<p>For domain lowering to work between two subdomains, both sides have to &#8220;lower their shields&#8221; to a common middle ground. As this technique catches on across departments and their corresponding subdomains, you can quickly reach a point where just about all the subdomains on the corporate web have provisions to lower their domain to the common corporate parent domain.</p>
<p>This is convenient and quite powerful for building web apps that can access data bits from all across the company.  The problem is that it weakens your corporate defenses across the board.  If just one of the subdomain silos were compromised and an attacker were able to inject malicious JavaScript to execute in the browser context of that compromised subdomain, that malicious code would have easy access to every subdomain across the company that lowers its domain to foo.com.</p>
<p>This risk grows with scale.  The more subdomains you have that routinely lower their domains to the common ground, the greater the risk that one of them may be compromisable and serve as a beachhead to your entire network.</p>
<h4>Tune In Next Time</h4>
<p>There is a way to mitigate this weakest link risk such that an attacker compromising a weak subdomain does not get access to everything.  This requires inverting some of the relationships presented in this article and making the silos deeper rather than shallower.  I&#8217;ll cover &#8221;Siloed Domain Lowering&#8221; in my next cross-domain article.</p>
<p><em>Originally published on my <a href="http://blogs.msdn.com/b/dthorpe/archive/2007/09/27/cross-domain-communication-using-domain-lowering.aspx">MSDN blog</a>.</em></p>
<p><img src="http://blogs.msdn.com/aggbug.aspx?PostID=5180444" alt="" width="1" height="1" /></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;count=none&amp;text=Cross-Domain%20Communication%20Using%20Domain%20Lowering" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;count=none&amp;text=Cross-Domain%20Communication%20Using%20Domain%20Lowering" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fdannythorpe.com%2F2007%2F09%2F28%2Fcross-domain-communication-using-domain-lowering%2F&amp;title=Cross-Domain%20Communication%20Using%20Domain%20Lowering" id="wpa2a_16">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2007/09/28/cross-domain-communication-using-domain-lowering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Cross-Domain Communication:  The Architecture Journal</title>
		<link>http://dannythorpe.com/2007/06/18/secure-cross-domain-communication-the-architecture-journal/</link>
		<comments>http://dannythorpe.com/2007/06/18/secure-cross-domain-communication-the-architecture-journal/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 01:53:50 +0000</pubDate>
		<dc:creator>Danny Thorpe</dc:creator>
				<category><![CDATA[Windows Live Quantum Mechanics]]></category>
		<category><![CDATA[cross-domain]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows Live]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[The June issue (Journal 12) of The Architecture Journal focuses on web architecture.  I was delighted to be invited to contribute, and wrote &#8220;Secure Cross-Domain Communication in the Browser&#8221; for this issue.  In the article I describe a somewhat bizarre technique we use in the Windows Live Contacts web control and Windows Live Spaces web control to move data from <a href='http://dannythorpe.com/2007/06/18/secure-cross-domain-communication-the-architecture-journal/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>The June issue (Journal 12) of <a href="http://msdn2.microsoft.com/en-us/arcjournal/default.aspx">The Architecture Journal</a> focuses on web architecture.  I was delighted to be invited to contribute, and wrote &#8220;Secure Cross-Domain Communication in the Browser&#8221; for this issue.  In the article I describe a somewhat bizarre technique we use in the <a href="http://dev.live.com/contactscontrol/">Windows Live Contacts web control</a> and <a href="http://dev.live.com/spacescontrol">Windows Live Spaces web control</a> to move data from HTML pages running on *.live.com to and from third party web sites.  This is how the contacts control returns user-selected contact data to the page hosting the control, a web site that is not a Microsoft site.</p>
<p>The print edition of <a href="http://download.microsoft.com/download/f/5/2/f520c83a-d2ed-4be8-9bc6-b39a1f9a4562/AJ12_EN.zip">Journal 12</a> is out already and was handed out at TechEd in Orlando earlier this month.  You can request a print copy by registering on the Journal&#8217;s web site, or you can just <a href="http://download.microsoft.com/download/f/5/2/f520c83a-d2ed-4be8-9bc6-b39a1f9a4562/AJ12_EN.zip">grab the PDF</a> and read it on-screen (<a href="http://dannythorpe.com/wordpress/wp-content/uploads/2011/06/AJ12_EN.pdf">2nd PDF source</a>).  Journal 12 will rotate into the headlines on the Journal&#8217;s homepage soon.</p>
<p><a title="Undisclosed Browser Technology" href="http://dannythorpe.com/2007/05/31/undisclosed-browser-technology/">A few posts ago</a> I mentioned I could finally reveal <a title="Undisclosed Browser Technology" href="http://dannythorpe.com/2007/05/31/undisclosed-browser-technology/">what I had been working on at Google</a>.  Now I can also tell you in exquisite detail what I&#8217;ve been working on here at Microsoft for the past year and foreseeable future:  cross-domain browser communication techniques.  Coaxing stubborn little bits to migrate through impenetrable browser barriers.</p>
<p>&#8220;Secure Cross-Domain Communication in the Browser&#8221; is a high-level walk-through of the iframe URL technique of passing information between domain contexts in the browser, it&#8217;s limitations and weaknesses, and the approach we&#8217;ve taken to build a channel communications library to fortify against those weaknesses and limitations.</p>
<p>Over the next few weeks I will be posting here on <a href="http://blogs.msdn.com/dthorpe/">Windows Live Quantum Mechanics</a> a series of articles digging into the nitty gritty of cross-domain communication, why it has been taboo in the browser, why it&#8217;s time to change that perception, and techniques and code you can use today to achieve it &#8211; without compromising security or server scalability.</p>
<p>Cross domain communication would be much easier with the browser&#8217;s help and shepherding, but with a little bit of effort we can actually do quite a bit today &#8211; safely - in spite of the browser&#8217;s objections.</p>
<p><img src="http://blogs.msdn.com/aggbug.aspx?PostID=3392059" alt="" width="1" height="1" /></p>
<p><em>Originally published on my <a href="http://blogs.msdn.com/b/dthorpe/archive/2007/06/18/secure-cross-domain-communication-the-architecture-journal.aspx">MSDN blog</a>.</em></p>
<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;count=none&amp;text=Secure%20Cross-Domain%20Communication%3A%20%20The%20Architecture%20Journal" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;counturl=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;count=none&amp;text=Secure%20Cross-Domain%20Communication%3A%20%20The%20Architecture%20Journal" scrolling="no" style="border:none;overflow:hidden;width:55px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;size=medium&amp;count=false" scrolling="no" style="border:none;overflow:hidden;width:32px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fdannythorpe.com%2F2007%2F06%2F18%2Fsecure-cross-domain-communication-the-architecture-journal%2F&amp;title=Secure%20Cross-Domain%20Communication%3A%20%20The%20Architecture%20Journal" id="wpa2a_20">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2007/06/18/secure-cross-domain-communication-the-architecture-journal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  dannythorpe.com/tag/cross-domain/feed/ ) in 0.42377 seconds, on Feb 4th, 2012 at 7:04 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 4th, 2012 at 8:04 am UTC -->
