IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Redirection php sur un site sécurisé ssl


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut [Sécurité] Redirection php sur un site sécurisé ssl
    Bonjour à tous,

    J'ai écumé les forums et FAQ sans trouver de réponse à mon problème :

    En stage, je développe un site pour une société, nous avons décidé de développer le site sur deux serveurs (pour diverses raisons...)

    Le problème est que cet autre serveur utilise un canal SSL avec identification (une fenêtre nous demande mot de passe et login). Des comptes sont crées sur ce serveur pour mes utilisateurs.

    Ce que je cherche à faire c'est une redirection php d'une de mes pages vers la page d'acceuil de ce second serveur, sans faire apparaitre la fenetre de mot de passe (car mon utilisateur ne les connait pas)

    J'ai pour le moment une solution qui fonctionne sur firefox, mais qui n'est pas sécurisée ( en gros un header de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Location: https//login:password@sitenumero2.com');
    )

    Cette soluton n'est pas terrible du tout car non sécurisée et non fonctionelle sur IE, j'essaye pour le moment avec ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $args = base64_encode($_POST['login'].':'.$_POST['password']);
    header("Authorization: Basic $args");
    header("Location: https://sitenumero2.com",false);
    Et ça ne fonctionne pas non plus.

    J'ai cherché un peu du coté des variables _AUTH_ de http mais ça ne me parle pas beaucoup.

    Voilà, quelqu'un aurait-il la solution miracle ?

    Merci !

    Colin

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    ...

    Voilà l'avancement des choses, je pense pouvoir y parvenir en passant par les fonctions cURL de php. Voici un début de script, il me resterait à obtenir les certificats et paramètres SSL de l'autre serveur pour configurer correctement la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
     
    <?php
    # [...]
    // essayé avec les deux, même message d'erreur :
    $args = base64_encode($_POST['login'].':'.$_POST['password']);
    // $args = $_POST['login'].':'.$_POST['password'];
    # [...]
     
    // Création d'une ressource cURL
    $ch = curl_init('https://sitenumero2.com');
    // Définition de l'URL et autres options appropriées
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 'Location:');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, $args);
     
    // Récupération de l'URL et passage au navigateur
    if(curl_exec($ch))
    {
    	echo 'exécutée';
    }
    else
    {
    	echo 'même pas exécutée : ';
    	echo curl_error($ch);
    	echo '<br /><br />';
    	print_r(curl_getinfo($ch));
    }
    // Fermeture de la ressource cURL et libération des ressources systèmes
    curl_close($ch);
     
    # [...]
    ?>
    J'obtiens à l'exécution, avec un mdp et login correct :

    même pas exécutée : SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

    Array ( [url] => https://sitenumero2.com [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0.417 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 0 [upload_content_length] => 0 [starttransfer_time] => 0 [redirect_time] => 0 )
    Je pense qu'avec quelques informations en plus sur le SSL (que devrait me fournir le webmaster du 2ème site), je pourrais entrer les paramètres manquants.

    Est ce que j'introduis une faille de sécurité si je fais cela ?

    A suivre...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Non !

    J'y suis parvenu, mais avec ça je copie le contenu des pages de mon serveur 2 (sécurisé SSL) vers mon serveur 1, et ce n'est pas ce que je veux !

    Est ce possible de lancer depuis le php d'un serveur 1 une connexion sécurisé entre mon client et un serveur 2 ?

    Proxys ?
    Headers ?


  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Regarde ce post qui pourra peut-être t'aider.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Merci marcha, mais je ne pourrais pas mettre en place une telle solution, je ne peux pas (pour le moment...) poser de scripts sur le serveur B.

    N'est-il pas possible d'envoyer au navigateur du client une page avec un refresh sur l'adresse du deuxième serveur et un script (Javascript ?) spécifiant l'entête-requête à envoyer à ce serveur ?

    Je vais voir ça sur les forums Javascript.

    Bien entendu pour sécuriser cela je mettrai en place une autre connexion SSL entre mon premier serveur et le client (sans quoi les entêtes voyageront en clair)...

    En cas de succès, je vous tiens au courant !

    Colin

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    A ma connaissance il n'est pas possible de faire ça avec une authentification
    apache sans utiliser cette notation http://user:password@host qui n'est pas
    totalement compatible. (Tu pourrais gérer une forme de cryptage coté javascript,
    mais pas très safe)

    L'autre solution serait de faire un proxy complet sur ton serveur non sécurisé
    qui irait chercher les ressources avec Curl sur le serveur sécurisé. Mais ça ne
    me semble non plus pas une bonne solution.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Re bonjour,

    Je ne trouve pas et je commence à me décourager.

    Je suis néanmoins entré en contact avec un Webmaster du 2ème site, et nous allons voir comment pouvoir débloquer la situation...


  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,

    Il me semble que la redirection telle que je la cherchais initialement n'existe pas.

    J'ai pour idée d'utiliser mon serveur pour relayer les requêtes clients au deuxième serveur, et vice-versa pour les réponses (l'utiliser comme proxy ou routeur ??). Mais voilà je ne m'y connais pas du tout. La fonction cURL semble inadapté et je ne m'en sort pas avec les fonctions sockets.

    Comment puis-je procéder sur un serveur apache (php 5.20) ?

    Je n'ai plus qu'une semaine pour chercher une solution dans ce sens...

  9. #9
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Pour faire un proxy Curl devrait faire l'affaire. (sauf éventuellement pour
    du streaming, quoi que...)

    T'embête pas avec des sockets
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Bonjour marcha,

    Je te remercie d'être encore présent sur le sujet.

    Seulement je ne sais pas comment procéder, pour le moment voilà le code que je tente d'utiliser avec cURL, mais pas de la bonne manière je le crains.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    // Création d'une ressource cURL
    	$ch = curl_init('https://[totoserveur]/coremedia/generator/coc/CmsStart;templateId=CmsStart2.jsp.html');
     
    	// Setup headers - I used the same headers from Firefox version 2.0.0.6
    	// below was split up because php.net said the line was too long. :/
    	$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    	$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png;q=0.5";
    	$header[] = "Cache-Control: max-age=0";
    	$header[] = "Connection: keep-alive";
    	$header[] = "Keep-Alive: 300";
    	$header[] = "Pragma: "; // browsers keep this blank. 
     
    	// Définition de l'URL et autres options appropriées
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    	#curl_setopt($ch, CURLOPT_HEADER, true);
    	curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    	curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    	curl_setopt($ch, CURLOPT_REFERER, getenv('HTTP_HOST')); 
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    	curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    	#curl_setopt($ch, CURLOPT_INTERFACE, getenv('HTTP_HOST')); // retourne chez le client ?	
    	curl_setopt($ch ,CURLOPT_CONNECTTIMEOUT, 4);
    	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    	curl_setopt($ch, CURLOPT_USERPWD, $args);
    	// Récupération de l'URL et passage au navigateur
    	if($res = curl_exec($ch))
    	{
    		echo 'exécutée<br />';
    		echo '<br />';
    		echo curl_error($ch);
    		print_r(curl_getinfo($ch));	
    		// Fermeture de la ressource cURL et libération des ressources systèmes
    		curl_close($ch);
    		echo $res;
    	}
    	else
    	{
    		echo 'même pas exécutée : ';
    		echo curl_error($ch);
    		echo '<br /><br />';
    		print_r(curl_getinfo($ch));		
    		// Fermeture de la ressource cURL et libération des ressources systèmes
    		curl_close($ch);
    	}
    Ensuite, seul un partie des requêtes clients doivent être interceptés pour être relayées sur l'autre serveur (car il reste une application qui doit s'effectuer sur le mien).

    Essayons d'abord de mettre en place avec succès l'accès en mode proxy par cURL.

    Merci du soutien, ton message me laisse plein d'espoirs

  11. #11
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Est-ce que tu arrives déjà à lire un fichier sur l'autre serveur avec cette
    fonction utilisant CURL ?
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Avec ce script j'arrive à m'identifier et accéder à la page en question (qui s'exécute et renvoie une redirection) mais la redirection s'applique en chemin relatif mon serveur et non pas sur le serveur tierce, ce qui provoque une erreur 404.

    Une question basique, cURL me permet de faire proxy entre mon client et le serveur 2 ?
    ou bien me permet-il de me connecter à un proxy déjà établi sur le serveur 2 ?

  13. #13
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    en fait il va te falloir gérer toute les requêtes, par exemple, la page 1 que tu
    vas chercher sur le serveur 2 aura comme url (vu du client) l'url de ton serveur 1
    Donc les images par exemple vont produire des requêtes qui vont produire des
    404 sur le serveur 1.

    Le plus simple c'est de gérer les 404 avec le .htaccess pour un dossier donné, par
    exemple le dossier /proxy sur le serveur 1.

    Tu assigne une page de traitement d'erreur qui va faire proxy

    Dans le dossier /proxy tu crée un fichier .htaccess avec le code suivant:
    ErrorDocument 404 /proxypage.php

    Ensuite dans la page proxypage.php tu récupère le chemin demandé
    avec $_SERVER['REQUEST_URI'] il faudra retiré le /proxy de ce chemin

    tu lance ta requête CURL sur serveur 2 avec ce chemin, puis tu retourne
    le contenu à ton client.

    Tu vois l'idée ?
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Salut,

    ok, je vois l'idée, je tente et je te tiens au courant...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Salut marcha,

    bien je vais y aller pas à pas

    j'ai bien mis en place ce dossier mais avant de relancer la fonction cURL, j'ai voulu vérifier dans le proxypage.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SERVER['REQUEST_URI'];
    et là je me retrouve avec l'URI que j'ai mise dans le .htaccess et pas celle qu'il y a dans la barre de navigation (en gros "proto_site/proxy/proxypage.php" au lieu de "fr-FR/moduls/home/index_fr.html")

    Je précise que je développe en local sur wampserver2.0, si le fait de tester en local changeait quelquechose...

  16. #16
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Etrange, essaie de faire un print_r($_SERVER); pour voir si il y a pas une entrée
    qui contient l'info dont tu as besoins.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Erreur de ma part, je n'avais pas mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 /proto_site/proxy/proxypage.php
    dans mon htaccess mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 proto_site/proxy/proxypage.php
    ce qui change pas mal de choses...

  18. #18
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Jette voir un oeil à ce qui existe aussi, voici une page intéressante,
    regarde voir phpproxy

    http://www.free-proxy.fr/index.php?m...ript-php-proxy
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Merci marcha, le lien est intéressant, je regarde en détail.

    Avec tes infos j'ai réussi avec cURL, mais je rencontre un problème par rapport à l'architecture de l'autre serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    500 Servlet Exception
     
    java.lang.IllegalArgumentException: No template found for 363450/CmsStart2.jsp.html/fr-FR/moduls/home/index�

    En fait, sur le serveur que je contacte, quand je navigue normalement, j'ai toujours la même adresse dans l'url.

  20. #20
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Tu peux poster un peu de code si tu veux pour que je regarde
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Web Service] Php, SOAP et connexion sécurisé ssl
    Par piaichpi dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 25/02/2011, 16h36
  2. Probleme avec formulaires php sur le site distant
    Par Lionel_aw dans le forum Langage
    Réponses: 2
    Dernier message: 26/03/2010, 16h16
  3. Réponses: 3
    Dernier message: 24/10/2009, 18h46
  4. Réponses: 32
    Dernier message: 29/09/2009, 11h10
  5. [MySQL] aide pour connection mysql avec du php sur mon site web
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/09/2007, 00h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo