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 :

inclure un résultat perl dans un script PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut inclure un résultat perl dans un script PHP
    Bonjour à tous,
    J'ai un problème chez mon hébergeur qui ne gère pas l'algorithme de cryptage SHA-512 que j'ai prévu d'utiliser (PHP 5.2 oblige !).
    Après avoir cherché des librairies ou trucs du genre qui ne me permettait pas de régler mon problème, j'ai opté pour un script perl dont je veux mettre le résultat dans une variable PHP.
    Code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function passwcrypt($p){
    	if (CRYPT_SHA512 == 1) return crypt($p, '$6$rounds=1000$salagechoisi123456$');// on ne sait jamais, un jour peut-être :)
    	else return file_get_contents("http://www.monsite.com/cgi-bin/crypt.pl?$p");
    }
    $p = $_GET['p'];
    echo passwcrypt($p);
    script perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    print "Content-type: text/plain\n\n";
    my $psw = $ENV{QUERY_STRING};
    my $salt = '$6$rounds=1000$salagechoisi123456$';
    my $encryptedPsw = crypt $psw, $salt
    print "$encryptedPsw";
    mon problème est que je ne veux évidemment pas envoyer ma requête en HTTP mais c'est la seule manière que j'ai trouvé, si je fais un file_get_contents en chemin relatif (../cgi-bin/crypt.pl?$p) ou absolu (/home/www/cgi-bin/crypt.pl?$p) j'ai une erreur "failed to open stream".

    J'ai bien tenté du passtrhu() mais en fait je ne comprends pas comment appeler mon fichier perl correctement.

    Merci pour votre aide

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    t'as pas hash ?

  3. #3
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    si, mais je ne peut pas lui définir le nombre de rounds ni donner le salt de la même manière

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    hum, en faisant une boucle normalement on arrive à la même chose

  5. #5
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    alors je suis preneur de toute explication pour utiliser hash avec le même rendu que crypt() en sha512 + rounds + salt comme le fait PHP > 5.3

    Sinon je suis aussi preneur d'une solution pour un appel à mon fichier perl en local.

    Merci

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    fait un shell_exec

  7. #7
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    j'ai mis un peu de temps avant de trouver comment utiliser cette fonction mais ça marche enfin.
    Pour ceux qui veulent :
    Script PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function passwcrypt($p){
    	if (CRYPT_SHA512 == 1) return crypt($p, '$6$rounds=1000$salagechoisi123456$');
    	else return shell_exec("cd /home/user/www/cgi; ./crypt.pl '$p'");
    }
    $p = (isset($_GET['p'])) ? $_GET['p'] : $_POST['p'];
    echo passwcrypt($p);
    Et le perl modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/perl
     
    # first argument passed through shell command
    my $psw = $ARGV[0];
     
    # salt
    my $salt = '$6$rounds=1000$salagechoisi123456$';
     
    # crypt
    my $encryptedPsw = crypt($psw, $salt);
     
    # print the encrypted password
    print $encryptedPsw;
    Dans certains cas (variables reçues via GET dans la page PHP), on peut ne pas passer $p par le shell et la récupérer directement dans le script perl par exemple avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use CGI(":standard");
    my $psw = param("p")
    Je n'ai pas réussi à la récupérer directement de l'environnement en cas d'envoi par POST, même avec $ENV{QUERY_STRING}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Inclure du code PERL dans une page php ?
    Par Munkey74 dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2007, 09h18
  2. [PHP-JS] Inclure du code ASP dans un script PHP
    Par daquin dans le forum Langage
    Réponses: 7
    Dernier message: 04/09/2006, 18h20
  3. Récupérer des variables Perl dans un script PHP
    Par barabath dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 01h27

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