Urlrequest au travers d'un .htaccess

Signaler
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
-
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
-

22 réponses

Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonjour, avant tout je tiens a préciser que j'ai fait le tour du web , donc j'ai testé tous ce qui a été dit, malgrès cela il m'est impossible de d'accéder a un fichier protéger par u htaccess.

voici mon code:

package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;


public class Aero extends Sprite {
//==========================================================
//PUBLIC
public function Aero() {
init();
}//optimisation compilation
//==========================================================
//PRIVATE
private function init():void {
stage.align="TL";
stage.quality="BEST";
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.frameRate=24;

var request:URLRequest=new URLRequest("http://www.aerolyte.fr/test/bd/menu.xml");
var credentials:String=Base64.encode("moi:bleu");
trace(credentials);
var authHeader:URLRequestHeader=new URLRequestHeader("Authorization","Basic "+credentials);
var headers:Array=[];
headers.push(authHeader);
request.requestHeaders=headers;
request.data=new URLVariables("log=aerolyte");//juste pour test
request.method=URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,fin1);
loader.addEventListener(IOErrorEvent.IO_ERROR,ioEr);
loader.load(request);

}
//==========================================================
//EVENT
private function fin1(evt:Event):void{
trace("oki");
}
private function ioEr(evt:IOErrorEvent):void{
trace(evt.target.data);
}
}
}


la sortie:

bW9pOmJsZXU=
Erreur d'ouverture de l'URL 'http://www.aerolyte.fr/test/bd/menu.xml'
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>405 Method Not Allowed</TITLE>
</HEAD>
Method Not Allowed

The requested method POST is not allowed for the URL /test/bd/menu.xml.
</HTML>

maintenant si je passe la méthode en GET, j'obtient:


bW9pOmJsZXU=
Erreur d'ouverture de l'URL 'http://www.aerolyte.fr/test/bd/menu.xml?log=aerolyte'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Error 401 - Unauthorized</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="cache-control" content="no-cache" />
</head>

Error 401 - Unauthorized

L'accès au fichier requiert une autorisation.



</html>


Ce que je comprends , c'est qu'il ne supporte pas la méthode POST alors paretout sur le web elle semble etre de rigueur.
Et quand je la passe en GET, il n'applique pas les authorisations, qui sont valide car fonctionne sur une requette manuelle dans la barre d'adresse.


Alors ca fait 3 jours, que je planche dessus, allant meme jusqu'a découvrir que le convertisseur base64-vegas de callista est inexacte, etc...

Jj'ai meme placé un fichier crossdomain , bien que cela ne sert que pour le debug du player version 9.5, mais il n'y a rien a faire.
c'est pour cela que je sollicite les quelques experts présent qui ont déjà été confronté a cette manip.

Cordialement
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Question : pourquoi veux-tu protéger ton fichier avec Htaccess, alors que tu veux tout de même y accéder de l'extérieur ?

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Pour mettre un protection basique.
basique car je sais que tous est craquable, mais si déja je peux limiter les possibilité de 75% c'est deja bien.
Comme tu imagine le mot de passe et le login ne seront pas en clair.

Quelques news suite aux tests.

package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.system.Security;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;


public class Aero extends Sprite {
private var Nom:TextField;
//==========================================================
//PUBLIC
public function Aero() {
init();
}//optimisation compilation
//==========================================================
//PRIVATE
private function init():void {
stage.align="TL";
stage.quality="BEST";
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.frameRate=24;
Security.loadPolicyFile("http://www.aerolyte.fr/crossdomain.xml");
Nom=new TextField();
Nom.antiAliasType="advanced";
Nom.autoSize=TextFieldAutoSize.LEFT;
Nom.mouseEnabled=false;
Nom.multiline=true;
Nom.wordWrap=true;
Nom.width =400;
Nom.height=800;
addChild(Nom);

var request:URLRequest=new URLRequest("http://www.aerolyte.fr/test/bd/menu.xml");
var credentials:String=Base64.encode("moi:bleu");
Nom.text=credentials;
var authHeader:URLRequestHeader=new URLRequestHeader("Authorization","Basic "+credentials);
var headers:Array=[];
headers.push(authHeader);
request.requestHeaders=headers;
request.data=new URLVariables("log=aerolyte");//juste pour test
request.method=URLRequestMethod.GET;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,fin1);
loader.addEventListener(IOErrorEvent.IO_ERROR,ioEr);
loader.load(request);

}
//==========================================================
//EVENT
private function fin1(evt:Event):void{
Nom.appendText( "oki");
}
private function ioEr(evt:IOErrorEvent):void{
Nom.appendText("   "+evt.target.data);
}
}
}


avec ce bout de code j'ai les mêmes erreurs que précédemment en sortie flash.
Mais sur le navigateur, j'ai remarqué que la fenetre standard d'authorization s'ouvre; et oh surprise en attendant un peu puis en tappant n'importe quoi juste dans le champs login et validant;la requete se poursuit.

Autrement dit pourquoi ouvre t'il la fenetre par défaut alors qu'il a deja stocké les bon login et password?
et surtout pourquoi le temps influt dans cette requette.

si on tappe rapidement des logins quelqconque les requetes echoue, mais si on prend sont temps la requete est bonne.

Je ne sais pas si cela peux apporter de la matière, mais voila.
Je commence a regarder du cot des socket, mais je suis pas certain que ce soit une bonne idée


test possible en ligne acette adresse:http://www.aerolyte.fr/test/Aero.swf
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
ben le post est justement là pour ça ... flash n'est qu'une interface qui fait transiter les données entre un terminal et un script serveur.

Quoique tu fasses, tu ne peux pas plus blinder que ça.
Au mieux colle un script dans ton php qui vérifie bien que le fichier demandeur est le fichier flash, et ça devrait solutionner beaucoup de soucis.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
aures-tu une piste plus précise concernant le script php qui vérifie que flash est le demandeur?

Cordialment
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
De mémoire, il faut que tu vérifies une des variables dans $_SERVER. Certainement "HTTP_REFERER" qui devrait te donner le nom du fichier demandeur.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Du coup, je l'ais dans l'os car j'ai pas moyen de vérouiller un dossier avec login et mot de passe et de faire une requette pour y acceder
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
hé non ... mais tu peux empêcher d'autres programmes d'accéder à ton PHP !
C'est juste une question de structure de fichiers.
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
je comprends pas très bien la logique.
pour ma part je souhaite avoir des dossier contenant des libs, dbs , photo,etc.. ne pouvant pas etre accessible par tous, mais seulement par flash.
Or comme l'as3 est un language serveur, j'ai opté pour une sécurité par login et mot de passe.
maintenant si il n'est pas possible de l'automatisé dans une urlrequest, je reste sur le cul.

j'imagine que dans le php on peut définr un id a l'object flash et faire un controle de cette id lors de requete; je spécule carje n'ai pas de compétences en php. si le http_referer a un role similaire, je ne vois pas trop comment il me permettra de vérouiller mes dossiers.
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
L'as3 est un langage serveur ? tu dois confondre, là ... c'est justement un langage client...

Je pense plutôt que tu te prend la tête pour rien : flash au niveau des données agit exactement comme une page html avec ajax, rien de plus. Ce n'est pas le transfert flash/serveur que tu dois blinder (le post est là pour ça) mais le traitement des données via le scripe serveur.

Flash est demeure et restera une simple interface, tout comme une page html.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
oui, c'est effectivement une étourderie de ma part.

Du coup, faut'il que je fasse ne requette url simple en post avec des url variable contenant login et mdp , que je traite en passabt sur un fichier php?

Mais dans ce cas comment faire pour charger une lib partagées ou un xml en passant pas un php?
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Tu as l'art de te compliquer les choses ...

Quand tu fais un formulaire, que ce soit sur html ou sur flash, tu discutes de toutes façons avec un php derrière. Il n'y a aucune différence.
La personne entre ses login/pass, valide, ça envoie les données brutes au php (en POST de préférence), puis le php "répond" avec validation ou pas. Donc tout se passe dans le script appelé.

Tu peux éventuellement faire une vérification des champs remplis, etc sous flash, mais rien d'autre.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
ben, oui mais pas vraimment pour tous, par exemple les import de swf, swc, xml, fonts, images videos, sons, etc, sont généréralement faite par flash sansspasser par le php.
justement je souhaité garder cette simplicité, sans devoir repasser par du php., tout en vérouillant mes sources par un htaccess.

honnétement je vois pas plus simple.
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
ben une page HTML importe les médias aussi sans passer via php ...
De toutes façons, tu devras passer par un script serveur si tu veux de la sécurité. Le Htaccess bloque des choses, mais ne trie pas assez pour ça.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
ok je te remercie pegase.
il faut juste que je trouve:
> comment retourner tout les formats souhaité entre ph/swf
> le fonctionnnement du referer ,en complément du htaccess et des autorisations

Cordialement
Messages postés
72
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 octobre 2011

Tu peux toujours te compliquer la vie à essayer de cacher tes sources, mais peu importe la méthode de chargement, au final tes sources serons dans le cache du navigateur.
;)
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
non t'inquiéte, je fais du chargement de script et de libs à l'execution.
une petite innovation de ma part.
rien ne sort meme au decompilateur (sauf des classes de base) :)
Messages postés
72
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 octobre 2011

Bon bon, si tu veux vraiment protéger tes sources:
1: il faut que tu encodes tes sources, je te conseil le chiffrement symétrique XOR (facile à faire et rapide, exemple a ^ b c, donc c ^ b a),
2: tu fais un loader qui charge tout ça,
3: qui décode les ressources grâce à la clé secrète,
4: les exécutes (loader.loadBytes(bytes décodé))
5: le plus important, utiliser un opfuscateur de code sur le loader, pour protéger la clé de chiffrement (si tu le mets a fond, il va ralentir le code, mais vu que c'est qu'un loader, on s'en fou :)
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
Perso, je me demande si toutes ces protections de transfert sont vraiment utiles. Surtout qu'elles sont faciles à contourner.
Met une protection solide côté serveur et ça sera suffisant.

Peg'
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Merci blunt pour ton poste très instructif.
J'ai jeté un oeil , certes un poil rapide sur le XOR et l'obfuscation.
je prendrais plus le temps de décortiqué le potentiel

Toutefois et a l'instar de peg', je pense que que le rapport sécurité/flexibilité& rapidité, ne correspont pas trop a mes attentes.

J'oeuvre minutieusement au controle des temps de chargement des poids, des charges cpu, etc... Or sur un systeme optimisé le temp de decryptage se fait clairement sentir.

Concernant l'obfuscation je connaissau-it pas le terme, mais e, regardant dans le détail, je me suis rendu compte que c'est une démarche que j'utilise, en gardant un bon compromis entre sécurité et évolutivité. (il faut penser que pour certain script plutot pousser il faut plusieur heures pour retrouver la logique. Alors j'imagine meme pas qu'une autre personne puisse s'y retrouver facilement.

Dés que j'ai un peu de temps je fini mon bout de code et je posterais le principe générale, pour les personne qui s'attendent a une solution en lisant ce thread.

Cordialement