osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Problème de sécurité avec invoice.php
diaph
posté 3 Dec 2014, 08:28
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 153
Inscrit : 22-October 07
Membre no 19482



Bonjour,
J'ai placé un invoice.php " classique non pdf " côté client, pour que mes clients puissent imprimer leurs factures.
La facture s'affiche très bien et est imprimable.
Le problème est que je n'arrive pas à sécuriser la facturation, n'importe qui peut, en étant connecté sur son compte, imprimer une autre facture concernant un autre client !!!
Voici le code de départ de ma page invoice.php:
Code
<?php
/*
  $Id: invoice.php,v 1.6 2003/06/20 00:37:30 hpdl Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

require_once('includes/application_top.php');

   if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot();
    tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }
  
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ORDERS_INVOICE );

//require(DIR_WS_CLASSES . 'currencies.php');
// prevents reinclusion if called from checkout_process.php
require_once(DIR_WS_CLASSES . 'currencies.php');
$currencies = new currencies();

//include(DIR_WS_CLASSES . 'order.php');
// prevents reinclusion if called from checkout_process.php
//require_once(DIR_WS_CLASSES . 'order.php');

  $oID = tep_db_prepare_input($HTTP_GET_VARS['oID']);
  $orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");

  include(DIR_WS_CLASSES . 'order.php');
  $order = new order($oID);
  // création de la sécurité pour la récupération des factures pdf
// récupération de l'id de client de la commande en cours
$verif_order = tep_db_query("SELECT customers_id FROM " . TABLE_ORDERS . " WHERE orders_id = " . $oID . "");
$verif = tep_db_fetch_array($verif_order);

// comparaison des id des clients pour attester le client en cours
if($verif['customers_id'] == (int)$customer_id)
{
// fin debut sécurité
// début fin sécurité
}
else
{
echo TEXT_ALERT_SECURIT;
}
// fin sécurité
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<link href="stylesheet.css" rel="stylesheet" type="text/css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">

<!-- body_text //-->


Merci à ceux qui savent, de me conseiller voir de me dépatouiller !
wacko.gif


--------------------
J'utilise OScommerce MS2.2 (modifié pour php5) - Ebergeur LWS - Download Controller - Contrib PayPal IPN
Machine Mac Pro - Lion 10.7. 5 - Mamp
Go to the top of the page
 
chti_poupon
posté 3 Dec 2014, 12:04
Message #2


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2744
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Il me semble bien que ce problème est réglé au début de catalog/account_history_info.php en 2.2Rc1:
Code
  if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot();
    tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }

  if (!isset($HTTP_GET_VARS['order_id']) || (isset($HTTP_GET_VARS['order_id']) && !is_numeric($HTTP_GET_VARS['order_id']))) {
    tep_redirect(tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL'));
  }
  
  $customer_info_query = tep_db_query("select customers_id from " . TABLE_ORDERS . " where orders_id = '". (int)$HTTP_GET_VARS['order_id'] . "'");
  $customer_info = tep_db_fetch_array($customer_info_query);
  if ($customer_info['customers_id'] != $customer_id) {
    tep_redirect(tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL'));
  }

Le client doit être connecté, le numéro de commande exister et l'id du client correspondre à celui enregistré dans la commande: dans tout cas contraire, il est renvoyé dans ses buts.

Que dire de plus?
Chti poupon
Go to the top of the page
 
diaph
posté 3 Dec 2014, 13:20
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 153
Inscrit : 22-October 07
Membre no 19482



Bonjour chti_poupon,
Merci pour la réponse.
J'ai appliqué ce code sur mon invoice, mais ça me renvoi systématiquement sur account_history_info.php...


--------------------
J'utilise OScommerce MS2.2 (modifié pour php5) - Ebergeur LWS - Download Controller - Contrib PayPal IPN
Machine Mac Pro - Lion 10.7. 5 - Mamp
Go to the top of the page
 
chti_poupon
posté 3 Dec 2014, 17:34
Message #4


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2744
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Ben dame !
il faut adapter les lignes
Code
tep_redirect(tep_href_link(FILENAME_ACCOUNT_HISTORY, '', 'SSL'));

au nom FILENAME_... de ton invoice
Bon code !
Chti poupon
Go to the top of the page
 
diaph
posté 3 Dec 2014, 19:35
Message #5


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 153
Inscrit : 22-October 07
Membre no 19482



Oui certe !
Je l'ai compris après avoir répondu...
Mais maintenant j'ai le message suivant sur mon navigateur:
La page n'est pas redirigée correctement

"Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.

La cause de ce problème peut être la désactivation ou le refus des cookies."

Voici mon code:
Code
require('includes/application_top.php');
  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ORDERS_INVOICE);
  
if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot();
    tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }

  if (!isset($HTTP_GET_VARS['order_id']) || (isset($HTTP_GET_VARS['order_id']) && !is_numeric($HTTP_GET_VARS['order_id']))) {
    tep_redirect(tep_href_link(FILENAME_ORDERS_INVOICE, '', 'SSL'));
  }
  
  $customer_info_query = tep_db_query("select customers_id from " . TABLE_ORDERS . " where orders_id = '". (int)$HTTP_GET_VARS['order_id'] . "'");
  $customer_info = tep_db_fetch_array($customer_info_query);
  if ($customer_info['customers_id'] != $customer_id) {
    tep_redirect(tep_href_link(FILENAME_ORDERS_INVOICE, '', 'SSL'));
  }

  $breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_ORDERS, '', 'SSL'));
  $breadcrumb->add(NAVBAR_TITLE_2, tep_href_link(FILENAME_ORDERS_INVOICE, '', 'SSL'));
  $breadcrumb->add(sprintf(NAVBAR_TITLE_3, $HTTP_GET_VARS['order_id']), tep_href_link(FILENAME_ORDERS_INVOICE, 'order_id=' . $HTTP_GET_VARS['order_id'], 'SSL'));
  
  require(DIR_WS_CLASSES . 'order.php');
  $order = new order($HTTP_GET_VARS['order_id']);

pourtant les cookies sont bien activés.
J'ai fais un essai avec les lignes $breadcrumb, mais celà ne change rien.


--------------------
J'utilise OScommerce MS2.2 (modifié pour php5) - Ebergeur LWS - Download Controller - Contrib PayPal IPN
Machine Mac Pro - Lion 10.7. 5 - Mamp
Go to the top of the page
 
Havock
posté 4 Dec 2014, 09:48
Message #6


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 894
Inscrit : 4-February 04
Membre no 1926



Bonjour,

As tu essayé avec un autre navigateur ?

Si le pb ne se produit qu'avec Firefox regarde une piste : http://vite-une-solution-doc.blogspot.fr/2...ge-firefox.html


--------------------
L'indispensable est en cours de traitement,
L'urgent sera traité demain,
Le normal sera traité plus tard,
Le reste on vera ...
En conclusion : les journées sont trop courtes.
Utilisateur de MS2.2 Max 1.5 - OSC-Affiliate 1.09 - Admin With Access Levels 2.1 - Meta Tag Controller/ Generator - Credit/Gift Voucher/Coupons 5.05 - Download Controller v5.3 - X-Sell MS2 - WYSIWYG HTML Editor for Admin 1.7 - Dynamic Mo Pics - Loginbox Best - Order logging before payment processing - User Tracking - Faster Page Loads, Less DB queries - Plus plein de modifs perso :-)
Go to the top of the page
 
diaph
posté 4 Dec 2014, 10:48
Message #7


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 153
Inscrit : 22-October 07
Membre no 19482



Merci pour le conseil smile.gif
J'ai le même message avec Safari, je pense plutôt qu'il sagit d'un problème de code, à l'origine le fichier invoice.php est prévu pour l'Admin, pas pour le côté client, mais je ne sais pas ou est la faille !


--------------------
J'utilise OScommerce MS2.2 (modifié pour php5) - Ebergeur LWS - Download Controller - Contrib PayPal IPN
Machine Mac Pro - Lion 10.7. 5 - Mamp
Go to the top of the page
 
chti_poupon
posté 4 Dec 2014, 11:32
Message #8


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2744
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Il ne faut pas rediriger vers invoice.php, car, faute de nouvelle information, on part sur une boucle infinie...que le navigateur refuse !
L'exemple donné plus haut est extrait de catalog/account_history_info.php qui redirige vers account_history.php.
Il faut renvoyer vers la page qui a appelé catalog/invoice.php
Bon code !
Chti poupon
Go to the top of the page
 
diaph
posté 4 Dec 2014, 15:51
Message #9


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 153
Inscrit : 22-October 07
Membre no 19482



Bonjour et merci pour le soutien,
C'est account_history_info.php ou account_history.php qui envoie ver mon invoice.php, mais la facture ne s'affiche pas et ça me renvoie toujours sur mon account_history.php.
Donc, la seule option que j'ai, c'est de renvoyer vers FILENAME_ACCOUNT_HISTORY, comme dans account_history_info.php, puisque c'est justement cette page qui appelle invoice.php. On tourne en rond !
J'ai oublié de préciser, que pour rendre la facture imprimable, je n'ai PAS de:
Code
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->
, le problème ne viendrait-il pas de ça ?
J'ai aussi essayer de mettre la sécurité de mon ancien ivoice.php en PDF:
Code
// récupération de l'id de client de la commande en cours
$verif_order = tep_db_query("SELECT customers_id FROM " . TABLE_ORDERS . " WHERE orders_id = " . $oID . "");
$verif = tep_db_fetch_array($verif_order);

// comparaison des id des clients pour attester le client en cours
if($verif['customers_id'] == (int)$customer_id)
{
// fin debut sécurité

// création du pdf
// fin du pdf
// début fin sécurité
}
else
{
echo TEXT_ALERT_SECURIT;
}
// fin sécurité

mais ça ne fonctionne pas, parsque je n'arrive pas à métriser le code, j'ai des alertes diverses, mais la page ne s'affiche jamais.
Galère !

Ce message a été modifié par diaph - 4 Dec 2014, 16:47.


--------------------
J'utilise OScommerce MS2.2 (modifié pour php5) - Ebergeur LWS - Download Controller - Contrib PayPal IPN
Machine Mac Pro - Lion 10.7. 5 - Mamp
Go to the top of the page
 
chti_poupon
posté 5 Dec 2014, 12:48
Message #10


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2744
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Il semble que la page invoice.php soit appelée sans le paramètre en GET ?orders_id=5684...
Cette page doit s'ouvrir pour impression directe et non collecter des données - ce qui apparemment est fai
Peux-tu vérifier si le lien qui apparaît dans la barre d'état quand la souris est sur le bouton "invoice" de account_history.php finit bien par
Citation
?order_id=903752
?
Belle journée !
Chti poupon
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 21st November 2017 - 16:40
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)