Google+ Followers

donderdag 5 december 2013

CORS en hoofdbrekens enzo

Browsers bevatten tegenwoordig beveiligingen tegen XSS, waardoor het niet meer mogelijk is om via een XHTTP request data op te halen van een ander domein dan waar het javascript bestand van is gedownload.

Omdat het regelmatig voorkomt dat je toch met een ander domein wilt kunnen praten is CORS bedacht. SImpel gezegd; de het XHTTP request bevat de naam van het domein namens wie hij data opvraagt en de server die dat request ontvangt moet datzelfde domein teruggeven voordat javascript de boel accepteert.

De officiele manier om dir hostname door te geven is via een HTTP header 'Access-Control-Allow-Origin'. Als er meerdere domeinen toegestaan zijn dan moet er officieel voor elk domein een header worden gestuurd, maar in de praktijk werkt dat niet altijd omdat sommige browsers de headers platslaan tot één header met kommagescheiden domeinnamen, die dan dus feitelijk geen geldige domeinnaam meer zijn. Handig.

De oplossing is een simpel stukje server-side-scripting wat de domeinnaam van het XHTTP request ontvangt, controleert op geldigheid en botweg terugboert:

$http_origin = $_SERVER['HTTP_ORIGIN'];
if ($http_origin == "http://www.domain1.com" || $http_origin == "http://www.domain2.com" || $http_origin == "http://www.domain3.info")
{
header("Access-Control-Allow-Origin: $http_origin");
}

Zie ook: http://stackoverflow.com/questions/1...origin-domains