2010-07-11 4 views
1

Je suis en train de saisir une page Web avec actionscript, mais continue à obtenir cette erreur (par exemple en essayant d'attraper github.com):Yat-il un moyen d'attraper une page Web avec Actionscript ??? Je reçois un SecurityError

[SWF] /get-webpage.swf - 2,708 bytes after decompression Error: Request for resource at http://github.com by requestor from http://localhost:4567/get-webpage.swf is denied due to lack of policy file permissions.

* Security Sandbox Violation * Connection to http://github.com halted - not permitted from http://localhost:4567/get-webpage.swf

Est-il possible de faire ce travail en Actionscript? Comment le fichier crossdomain.xml joue-t-il? D'après ce que je comprends, un site Web met un crossdomain.xml à la racine, en spécifiant qu'un swf peut accéder à leurs affaires. Est-ce exact? De quoi ai-je besoin pour que le travail ci-dessus fonctionne? Le code que je travaille avec est essentiellement ceci:

var request:URLRequest = new URLRequest("http://github.com") 
var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, complete); 
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, error); 
loader.load(request); 

function complete(event:Event):void { 
    trace(event.target.data); 
} 

function error(event:SecurityErrorEvent):void { 
    trace(event.text); 
} 

Avec ce dans le fichier HTML:

var flashvars = {}; 
var params = {allowscriptaccess: "always"}; 
var attributes = {id: "my_flash", name: "my_flash"}; 
swfobject.embedSWF("/get-webpage.swf", "flash_content", "50%", "50%", "10.0.0", "playerProductInstall.swf", flashvars, params, attributes, swfHasLoadedSir); 

Est-il possible de contourner cette erreur de sécurité?

Répondre

7

RÉPONSE COURTE, NO.

RÉPONSE MOYENNE, NO. Je vois que github a une politique crossdomain xml ici. https://github.com/crossdomain.xml

Ceci est le fichier que Flash charge automatiquement lorsqu'il essaie de se connecter à un autre domaine.

Ce fichier xml dit, autorisez seulement flash sur github à aspirer des données. Donc github a explicitement dit qu'ils ne veulent pas que vous utilisiez Flash pour charger n'importe quel contenu.

<?xml version="1.0" encoding="UTF-8"?> 
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd"> 
    <allow-access-from domain="github.com" /> 
    <allow-access-from domain="gist.github.com" /> 
    <site-control permitted-cross-domain-policies="master-only"/> 
</cross-domain-policy> 

Je pense que le raisonnement de ce comportement de flash est que les gens et les entreprises feront confiance au flash. Je pense que ce mécanisme pourrait empêcher les attaques DOS massives (pensez à une bannière Flash chargée sur un site d'information en train de frapper, par exemple, github, cela pourrait provoquer une charge massive).

Vous pouvez envoyer un e-mail à github et ajouter votre domaine à sa liste dans le fichier crossdomain, mais cela peut prendre du temps et beaucoup de politique.

RÉPONSE LONGUE, OUI. Vous pouvez créer un proxy HTTP en utilisant PHP ou quelque chose comme cela pour tirer une page Web. Le code PHP ou le code devrait être exécuté sur le même domaine que celui dans lequel vous avez chargé votre fichier SWF. par exemple youdomain.com/folder/proxy.php. Vous devrez essentiellement demander à ce proxy de vous chercher une page web en PHP et renvoyer les résultats à flash. Tout ce processus est un peu douloureux, surtout si vous avez un service Web où vous devez envoyer des paramètres ou des en-têtes HTTP. Il existe des fichiers proxy PHP open source en ligne que vous pouvez installer.

Bonne chance! Retour à regarder Transformers 2 avec Megan Fox. Oh oui.

+0

Oui. Dans ce cas, utilisez un proxy (PHP, BlazeDS, ou Apache fonctionnent bien pour cela). Les politiques crossdomain peuvent ouvrir des sites à des menaces de sécurité graves: http://www.jamesward.com/2009/11/08/how-bad-crossdomain-policies-expose-protected-data-to-malicious-applications/ –

+0

Yep C'est la bonne réponse. Juste vous n'avez pas expliqué pourquoi. C'est la même politique d'origine qui empêche cela. – rook

Questions connexes