Debug: Tentative d'activation d'un échange Genebank.
"; // paramètres statiques (peuvent être inclus à partir d'un include séparé, comme dans: // include('localGbkParams.inc'); if ($_SERVER['REMOTE_ADDR']=="127.0.0.1") { $connection = mysql_connect('localhost','root'); $myUrl = 'http://127.0.0.1/B005/affichageGbk.php'; $gbkUrl = 'http://www.geneabank.org/cgi-bin/transaction'; } else { $connection = mysql_connect('localhost','sfroc','36mp8yan'); $myUrl = 'http://cgiv35.org/v2/affichageGbk.php'; $gbkUrl = 'http://www.geneabank.org/cgi-bin/transaction'; } /* Séquence paranoïde : * Je range dans le contexte de session l'Id de la session elle-même. * Ce bidouillou apporte une redondance qui servira à me conforter * dans l'idée que la demande d'affichage en retour provient bien de Gbk */ $session = session_id(); $_SESSION['Gbk_Sid'] = $session; // Cette auto référence est vraiment de la paranoïa... M'enfin /* Je sauve dans l'environnement de session tout ce qui pourra * me servir à vérifier le jeton et afficher l'acte en retour */ $_SESSION['Gbk_Amount'] = $amount; $_SESSION['Gbk_Str'] = $str2Display; /* Je calcule une clé qui est différente du (seul) sid pour éviter de rejouer une requête * qui aurait seulement le même nombre de points */ $key = $session . md5($session.$str2Display); $nbPoints=$amount; if ($nbPoints > 1) { $pluriel ='s'; } else { $pluriel =''; } echo <<Debug: Tentative d'activation d'un échange Genebank.
"; // paramètres statiques (peuvent être inclus à partir d'un include séparé, comme dans: // include('localGbkParams.inc'); if ($_SERVER['REMOTE_ADDR']=="127.0.0.1") { $connection = mysql_connect('localhost','root'); $myUrl = 'http://127.0.0.1/B005/affichageGbk.php'; $gbkUrl = 'http://www.geneabank.org/cgi-bin/transaction'; } else { $connection = mysql_connect('localhost','cgiv35','iv352001'); $myUrl = 'http://cgiv35.org/v2/affichageGbk.php'; $gbkUrl = 'http://www.geneabank.org/cgi-bin/transaction'; } /* Séquence paranoïde : * Je range dans le contexte de session l'Id de la session elle-même. * Ce bidouillou apporte une redondance qui servira à me conforter * dans l'idée que la demande d'affichage en retour provient bien de Gbk */ $session = session_id(); $_SESSION['Gbk_Sid'] = $session; // Cette auto référence est vraiment de la paranoïa... M'enfin /* Je sauve dans l'environnement de session tout ce qui pourra * me servir à vérifier le jeton et afficher l'acte en retour */ $_SESSION['Gbk_Amount'] = $amount; $_SESSION['Gbk_Str'] = $str2Display; /* Je calcule une clé qui est différente du (seul) sid pour éviter de rejouer une requête * qui aurait seulement le même nombre de points */ $key = $session . md5($session.substr($str2Display,1)); $nbPoints=$amount; if ($nbPoints > 1) { $pluriel ='s'; } else { $pluriel =''; } echo <<Debug Longueur de clé = $l
"; $inpSession=substr($key, 0, $l - 32); // Le MD5 doit occuper 32 caractères $session = session_id(); //echo "Debug session = $session
"; //session_id($session); En principe, ceci a déjà été fait if (isset($_SESSION['Gbk_Sid'])) { $sessKid = $_SESSION['Gbk_Sid']; if ( ($session != $inpSession) ) { echo "Erreur d'identification de session";
echo "
session = $session";
echo "
sessKid = $sessKid";
echo '
inpSession = ' . htmlspecialchars($inpSession);
echo "
Erreur d'initialisation de session";
/* Code parano Debug only
*
echo "
session = $session";
echo "
sessKid = $sessKid";
echo '
inpSession = ' . htmlspecialchars($inpSession);
* Fin de code Debug
*/
echo "
Erreur: Clé manquante en retour
"; $_SESSION['Gbk_Sid']=''; // Tuer ce code pour éviter tout vol de session return false; } /* ATTENTION: l'instruction suivante est peut-être gênante, * Dans la mesure où elle va interdire un réaffichage de la même * page par le bouton "actualiser" du navigateur. * Il pourrait être judicieux de la *supprimer* (elle n'est pas fondamentale) */ //$_SESSION['Gbk_Sid']=''; // Tuer ce code, maintenant inutile, pour éviter tout vol de session if (isset($_SESSION['Gbk_Str'])) { $str = $_SESSION['Gbk_Str']; //echo $str; } else { echo "Erreur d'initialisation (chaîne) de session
"; return false; } $expected_key = $session . md5($session.$str); //echo "Debug:";
//echo "
str=$str";
//echo "
key=$key";
//echo "
expd=$expected_key";
if ($key == $expected_key) { echo '
Good:'; }
echo '
Erreur de validation de cle de session.
"; return false; } /* On va récupérer ici les AUTRES paramètres de la requête, * Puis on vérifiera la signature du jeton, basée sur ces params */ if (isset($_GET['auth'])) { $auth = $_GET['auth']; // On n'arrive ici qu'après avoir vérifié que l'item était défini } else { echo "Erreur: non respect du protocole GeneBank (absence jeton)
"; return false; } if (isset($_GET['ref'])) { $ref = $_GET['ref']; //echo 'Debug: ref = ' . htmlspecialchars($ref) . '
'; } else { echo "Erreur: non respect du protocole GeneBank (absence référence)
"; return false; } if (isset($_GET['amount'])) { $amount=$_GET['amount']; //echo "Debug amount = $amount
"; if ($amount != $_SESSION['Gbk_Amount']) { echo 'Erreur: Le nb de points accordés ' . htmlspecialchars($amount) . "n'est pas celui demandé
"; return false; } } else { echo "Erreur: Nb de points accordés manquant.
"; return false; } if (isset($_GET['to'])) { $to=$_GET['to']; //echo "Debug to = $to
"; if (!isset ($GbkPwd[$to])) { echo 'Erreur: ' . htmlspecialchars($to) . " = Id inconnu pour l'association
"; return false; } } else { echo "Erreur: Id association manquant.
"; return false; } $passAsso=$GbkPwd[$to]; $expected_auth = md5("$amount $to $key $ref $passAsso"); /* * echo "Debug:";
echo "
auth=$auth";
echo "
expd=$expected_auth";
if ($auth == $expected_auth) { echo '
Good:'; }
echo '
Erreur: l'autorisation d'affichage par Généabank est invalide.
"; return false; } } // Fin de function verifJetonGBK function verifJetonGBK2() { /* * On a besoin de connaître les mots de passe des associations reconnues * Ceci peut être fait dans un fichier séparé comme * include('localGbkParams.inc'); * Le principe est d'initialiser une liste des mots de passe des associations * reconnues dans un tableau GbkPwd: */ $GbkPwd['cgiv35']='renat56'; $GbkPwd['association2']='motDePasse2'; /* ... */ // On tente d'abord de récupérer la session à l'origine de cette demande if (isset($_GET['key'])) { $key = $_GET['key']; $l = strlen($key); //echo "Debug Longueur de clé = $l
"; $inpSession=substr($key, 0, $l - 32); // Le MD5 doit occuper 32 caractères $session = session_id(); //echo "Debug session = $session
"; //session_id($session); En principe, ceci a déjà été fait if (isset($_SESSION['Gbk_Sid'])) { $sessKid = $_SESSION['Gbk_Sid']; if ( ($session != $sessKid) || ($session != $inpSession) ) { echo "Erreur d'identification de session";
/* Code parano Debug only
*
echo "
session = $session";
echo "
sessKid = $sessKid";
echo '
inpSession = ' . htmlspecialchars($inpSession);
* Fin de code Debug
*/
echo "
Erreur d'initialisation de session";
/* Code parano Debug only
*
echo "
session = $session";
echo "
sessKid = $sessKid";
echo '
inpSession = ' . htmlspecialchars($inpSession);
* Fin de code Debug
*/
echo "
Erreur: Clé manquante en retour
"; $_SESSION['Gbk_Sid']=''; // Tuer ce code pour éviter tout vol de session return false; } /* ATTENTION: l'instruction suivante est peut-être gênante, * Dans la mesure où elle va interdire un réaffichage de la même * page par le bouton "actualiser" du navigateur. * Il pourrait être judicieux de la *supprimer* (elle n'est pas fondamentale) */ //$_SESSION['Gbk_Sid']=''; // Tuer ce code, maintenant inutile, pour éviter tout vol de session if (isset($_SESSION['Gbk_Str'])) { $str = $_SESSION['Gbk_Str']; //echo $str; } else { echo "Erreur d'initialisation (chaîne) de session
"; return false; } $expected_key = $session . md5($session.substr($str,1)); /* * echo "Debug:";
echo "
key=$key";
echo "
expd=$expected_key";
if ($key == $expected_key) { echo '
Good:'; }
echo '
Erreur de validation de cle de session.
"; return false; } /* On va récupérer ici les AUTRES paramètres de la requête, * Puis on vérifiera la signature du jeton, basée sur ces params */ if (isset($_GET['auth'])) { $auth = $_GET['auth']; // On n'arrive ici qu'après avoir vérifié que l'item était défini } else { echo "Erreur: non respect du protocole GeneBank (absence jeton)
"; return false; } if (isset($_GET['ref'])) { $ref = $_GET['ref']; //echo 'Debug: ref = ' . htmlspecialchars($ref) . '
'; } else { echo "Erreur: non respect du protocole GeneBank (absence référence)
"; return false; } if (isset($_GET['amount'])) { $amount=$_GET['amount']; //echo "Debug amount = $amount
"; if ($amount != $_SESSION['Gbk_Amount']) { echo 'Erreur: Le nb de points accordés ' . htmlspecialchars($amount) . "n'est pas celui demandé
"; return false; } } else { echo "Erreur: Nb de points accordés manquant.
"; return false; } if (isset($_GET['to'])) { $to=$_GET['to']; //echo "Debug to = $to
"; if (!isset ($GbkPwd[$to])) { echo 'Erreur: ' . htmlspecialchars($to) . " = Id inconnu pour l'association
"; return false; } } else { echo "Erreur: Id association manquant.
"; return false; } $passAsso=$GbkPwd[$to]; $expected_auth = md5("$amount $to $key $ref $passAsso"); /* * echo "Debug:";
echo "
auth=$auth";
echo "
expd=$expected_auth";
if ($auth == $expected_auth) { echo '
Good:'; }
echo '
Erreur: l'autorisation d'affichage par Généabank est invalide.
"; return false; } } // Fin de function verifJetonGBK2 ?>