Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2006, 11h41   #1
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Par défaut Sécuriser correctement des documents avec Allopass

Bonjour,

Je débute quelques peu en ASP et j'ai une question à vous poser : je dois sécuriser plusieurs pages d'un site web avec la système allopass. Pour l'instant, mettons que j'ai trois pages : page1.asp, page2.asp et page3.asp

- page1.asp contient le script fournit par allopass.
- En cas de code invalide entré, l'utilisateur est redirigé vers page1.asp.
- En cas de code valide entré, l'utilisateur est redirigé vers page2.asp.
- page2.asp conduit ensuite vers page3.asp.

Concrétement, j'ai installé le script sur page1.asp avec succès et la redirection fonctionne. Mon problème est que j'aimerais faire en sorte que si l'utilisateur accède directement aux pages : page2.asp et page3.asp, celui-ci soit redirigé vers page1.asp s'il n'a pas entré de code valide auparavant.

(c'est simplement pour éviter les copiages "en dur" de l'adresse des pages : page2.asp et page3.asp dans la barre d'adresse par l'utilisateur malin qui souhaiterais passer outre le système de paiement...)

Merci pour votre aide,

Alex
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 11h55   #2
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
je suis surpris qu'Allopass ne te dise pas comment faire... as-tu consulté leur doc ou la FAQ ?
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 13h20   #3
Membre régulier
 
Inscription : décembre 2005
Messages : 177
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : décembre 2005
Messages : 177
Points : 85
Points : 85
J'ai déjà fait la même chose sur un site en PHP, il faut utiliser les sessions (d'ailleurs c'est ce qu'ils te disent de faire sur le site d'allopass)

- sur la page 1 tu crées une variable de session
- sur la pages 2 et 3 tu testes ta variable de session, si elle est vide ou non instanciée, c'est qu'on a tenté de acceder à la page sans passer par la page1, dans ce cas tu renvois vers la page 1.

Je te donne le principe vite fait, je ne me souviens plus exactement comme j'avais fais ca, l'idée est aussi que ta variable de session puisse également t'indiquer si le code rentré est le bon ou pas, mais je ne me souviens plus du tout comment je recuperais cette info.
Matth_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 13h36   #4
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Oui c'est un peu ça dans l'idée... En fait Allopass donne même le code mais en php alors que je veux de l'asp et donc j'ai quelques soucis pour le "traduire" correctement.

Voilà le code de protéction que je souhaite transposer en asp :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 $RECALL=$HTTP_GET_VARS["RECALL"];
 
 if (trim($RECALL)=="") {
  Header("Location: erreur.html");
  exit;
 }
 
 $RECALL = urlencode($RECALL);
 $AUTH = urlencode("54/75/456");
 
 $r=@file("http://www.allopass.com/check/vf.php4?CODE=$RECALL&AUTH=$AUTH");
 
 if ( substr($r[0],0,2) != "OK" ) {
  header("Location: erreur.html");
  exit;
 } 
 
setCookie("CODE_OK","1",0,"/",".mondomaine.com",false);
 
?>
Si quelqu'un pouvais e filer un petit coup de main je lui en serais très reconnaissant !

Alex
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 13h45   #5
Membre régulier
 
Inscription : décembre 2005
Messages : 177
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : décembre 2005
Messages : 177
Points : 85
Points : 85
laisse moi 5 min je te traduits ca et j'edite mon message

Edit : j'ai traduit rapidement le code, le probleme qui se pose en fait c'est la lecture de l'url distante avec la fonction file en PHP ; en ASP l'ouverture d'URL distante n'est pas supportée par défaut, j'ai trouvé sur le net qu'il y a un composant AspHTTP.Conn qui permet de le faire ; donc j'ai fait le code en supposant que tu l'utilisais. Si tu ne l'as pas il faut trouver un moyen de lire un URL distante, je n'ai pas d'idée de comment le faire. Je me souviens avoir poser la question sur le forum .NET et avoir obtenu une réponse qui semblait pas mal , quelqu'un avait écrit une fonction en .NET qui permettait de le faire, maintenant faut voir si il y a moyen d'adapter cette fonction en ASP ou en réecrire une similaire (en admettant si tu fais la recherches que tu retrouves mon poste).


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<%
RECALL=Request("RECALL")
if Trim(RECALL)="" then
	response.redirect("erreur.html")
	response.end
end if
 
RECALL=Server.UrlEncode(RECALL)
AUTH=Server.UrlEncode("54/75/456")
 
Set HttpObj=Server.CreateObject("AspHTTP.Conn")
 
HttpObj.Url="http://www.allopass.com/check/vf.php4?CODE="&RECALL&"&AUTH="&AUTH
 
result=HttpObj.GetURL
 
if Mid(result,0,2)<>"OK" then
	response.redirect("erreur.html")
	response.end
end if
 
'mettre en session ou en cookie que le code est ok
 
%>
Tiens moi au courant si ca fonctionne ou pas et comment tu t'en es sorti pour la lecture d'URL distante !
Matth_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 13h55   #6
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Ok merci beaucoup !
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 14h43   #7
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
En effet, je rencontre un problème :

Code :
1
2
3
Objet Server error 'ASP 0177 : 800401f3' 
 
Échec de Server.CreateObject
Si quelqu'un peut m'aider...
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 15h24   #8
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Je cherche toujours mais je ne trouve pas de solution différente en asp...
Par différente j'entends se passer de l'objet AspHTTP.Conn
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 16h27   #9
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
avec un petit coup d'XMLHttpRequest, ça ne fonctionnerait pas ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
var oXMLHttpRequest;
var XMLurl = 'http://www.allopass.com/check/vf.php4?CODE=<%= RECALL %>&AUTH=<%= AUTH %>';
if (window.XMLHttpRequest) {// branch for Netscape and FireFox
	oXMLHttpRequest = new XMLHttpRequest();
	}
else if (window.ActiveXObject) {// branch for IE
	oXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
else {// XMLHttpRequest non supporté par le navigateur   
	alert('Votre navigateur ne permet pas de vérifier.');   
	}
 
etc ...
en potassant un peu un livre sur l'AJAX (ajax à 200% de chez o'reilly), j'ai trouvé ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function httpRequest(reqType, url, asynch){
	if(window.XMLHttpRequest(){
		request = new HMLHttpReqest();
	}
	else if (window.ActiveXObject){
		request = new ActiveXObject("Msxml2.XMLHTTP");
		if (! request){
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	request.open(reqType, url, asynch);
	request.send(null);
}
 
function getReponse(pURL){
	httpRequest("GET", pURL, true);
	if(request.readyState == 4){
		if(request.status == 200){
			getReponse = request.responseText;
		}
	}
}
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 16h39   #10
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Peut être, mais dans ce cas, quel serait l'équivalent de :

Code :
1
2
3
4
5
6
result=HttpObj.GetURL
 
if Mid(result,0,2)<>"OK" then
	response.redirect("erreur.html")
	response.end
end if
Avec un XMLHttpRequest ?

Merci agrotic
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 16h51   #11
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
alex, j'ai modifié mon post avec de quoi récupérer une chaine de caractère

la fonction javascript te permet de récupérer la réponse alloPass, à toi de traiter ensuite en comparant la réponse avec 'OK' par exemple.

cela à le mérite de ne pas nécessiter l'installation d'un composant sur le serveur, mais t'oblige à faire du traitement javascript (côté client) pour vérifier ce qui a été saisi par l'internaute.
(comme je n'ai jamais intégré d'allopass, je ne sais pas si cela sera la méthode qui te conviendra le mieux)
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h17   #12
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Ok merci, mais voilà comment j'utilise tes fonctions javascript :

Code :
1
2
3
4
5
6
url = "http://www.allopass.com/check/vf.php4?CODE="&RECALL&"&AUTH="&AUTH
 
if (getReponse(url) <> "OK") then
	Response.redirect("erreur.asp")
	Response.end
end if
J'ai une erreur : "Type incompatible: 'getReponse' "

Je pense que c'est soit la valeur retournée par getReponse qui ne peut pas être comparée à un string, soit euh... je ne vois pas en fait...

Sinon toujours dans getReponse, a quoi correspondent les valeurs 4 et 200 ?

Merci encore.

Alex

EDIT:

j'ai même testé ça :

Code :
1
2
3
4
5
6
7
8
function getReponse(pURL){
	httpRequest("GET", pURL, true);
	if(request.readyState == 4){
		if(request.status == 200){
			return request.responseText;
		}
	}
}
Sans plus de succès...
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h22   #13
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
attention, mes fonctions sont en javascript et pas en vbscript !

elles s'exécutent donc côté client et pas côté serveur. tu ne peux mélanger du traitement client et serveur ...
par contre, tu peux, côté client, construire l'url en vbscript et générer ton javascript qui sera exécuté ensuite. fais une fonction javascript qui redirige vers telle page ou telle autre en fonction de la valeur d'une variable et le tour sera joué.
(utilisation de document.location.href=xxx; )
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h31   #14
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Euh vraiment dsl mais je ne comprends pas ce que tu veux dire, j'ai l'impression que ce que tu me dis c'est ce que je fais déjà, j'ai pas dû saisir un truc important...
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h34   #15
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
OK,

j'illustre ma réponse avec ton code auquel j'ajoute de la couleur :
en rouge : je code exécuté côté client
en bleu :le code exécuté côté serveur

url = "http://www.allopass.com/check/vf.php4?CODE="&RECALL&"&AUTH="&AUTH

if (getReponse(url) <> "OK") then
Response.redirect("erreur.asp")
Response.end
end if


ne vois-tu rien de gênant là-dedans ?
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h38   #16
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Ok je vois mieux, mais c'est pourtant ce que j'ai besoin de faire non ?

EDIT : Qu'entends-tu par "construire l'url en vbscript" ?
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 17h47   #17
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
en fait, je pense que tu as besoin, si tu utilises ma méthode (qui n'est peut-être pas la meilleure), de faire un code ASP qui génère une page html ne contenant que du code javascript qui fera la vérification et la redirection (même code couleur que précédement) :

1) fichier ASP :
response.write "<html><body>"
response.write "<script language=javascript>"
response.write "function [...]"
response.write "var url = http://www.allopass.com/check/vf.php4?CODE=" & RECALL & "&AUTH=" & AUTH & ";"
response.write "var reponse = getReponse(url);"
response.write "if(reponse == 'OK'){[...]}else{[...]}"
response.write "</script>"
response.write "</body></html>"


2) fichier html résultant qui exécutera le code javascript :
<html><body>
<script language=javascript>
function [...]
var url = http://www.allopass.com/check/vf.php...=xxx&AUTH=yyy;
var reponse = getreponse(url);
if(reponse == 'OK'){[...]}else{[...]}
</script>
</body></html>


3) redirection vers la bonne page
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 22h12   #18
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Bon voilà mon petit compte rendu après plusieurs heures de galère, tout n'est pas encore rose :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Response.write "<script language=javascript> "
Response.write "var request = null;"
 
Response.write "function httpR(reqType, url, asynch){ document.write('<br />dans httpR');"
Response.write "	if(window.XMLHttpRequest)" ' Firefox   
Response.write "    	request = new XMLHttpRequest();"   
Response.write " 	else if(window.ActiveXObject)" ' Internet Explorer   
Response.write "    	request = new ActiveXObject('Microsoft.XMLHTTP');"   
Response.write " 	else {" ' XMLHttpRequest non supporté par le navigateur   
Response.write "    	alert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...');"
Response.write "    	return;" 
Response.write " 	}"
Response.write "	request.open(reqType, url, asynch);"
Response.write "	request.send(null);"
Response.write "	document.write('<br />sortie de httpR');"
Response.write "}"
 
Response.write "function getReponse(pURL){ document.write('dans getReponse');"
Response.write "	httpR('GET', pURL, true);"
Response.write "	if(request.readyState == 4 && request.status == 200){"
Response.write "		document.write(request.responseText);"
Response.write "		return request.responseText;"
Response.write "	}"
Response.write "}"
 
Response.write "var reponse = getReponse('http://www.allopass.com/check/vf.php4?CODE="&RECALL&"&AUTH="&AUTH&"');"
Response.write "document.write('reponse : <br />'+reponse);"
Response.write "if(reponse == 'OK'){"
Response.write "	document.write('<br /><br />Paiement Allopass : OK');"
Response.write "	document.write('<br /><br />');"
Response.write "	document.write('Cliquez <a href=ici.asp>ICI</a> pour continuer...');"
Response.write "}"
Response.write "</script>"
Je n'ai pas d'erreur sauf que j'ai "permission refusée" et je suis presque convaincu (suite à quelques tests) que l'erreur vient de la ligne

Citation:
Response.write " request.open(reqType, url, asynch);"
Que faire ? Les XmlHttpRequest seraient-elles elles aussi compromises dans mon cas ?

Je suis perdu ...
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2006, 09h16   #19
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 219
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 219
Points : 17
Points : 17
Envoyer un message via MSN à alex6891
Le problème vient bien de ces deux lignes :

Code :
1
2
Response.write "	request.open(reqType, url, asynch);"
Response.write "	request.send(null);"
Avec j'obtiens l'affichage :

Citation:
dans getReponse
dans httpR
Et dès que je les mets en commentaires :

Citation:
dans getReponse
dans httpR
sortie de httpRreponse :
undefined
Quelqu'un a t-il une solution ?
alex6891 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2006, 09h53   #20
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
tu dois avoir une erreur javascript de retournée, non ?
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h01.


 
 
 
 
Partenaires

Hébergement Web