[BUGREPORT] Possibilità di acquistare a costo zero.

Documentazione generica riguardo osCommerce

Moderatore: mod Documentazione

Rispondi
Avatar utente
marcus
membro Master
membro Master
Messaggi: 1619
Iscritto il: 04/12/2003, 1:00
Contatta:

[BUGREPORT] Possibilità di acquistare a costo zero.

Messaggio da marcus »

E' stato segnalato un bug critico in osC 2.2MS2 che consente in teoria di acquistare prodotti a costo zero:

http://www.oscommerce.com/community/contributions,4573

Questa la procedura:
1) change the currency value.
2) correct it in the adress bar to currency=EUR from currency=Eur (or USD with Usd if you prefer)
3) make an order and complete it

Il problema effettivo si presenta nel caso di vendita di beni digitali, scaricabili immediatamente dopo pagamento con cc.

Il bug non si trova nella classe currencies, ma nella query interna alla funzione tep_currency_exists:

Codice: Seleziona tutto

$currency_code = tep_db_query("select currencies_id from " . TABLE_CURRENCIES . " 
where code = '" . tep_db_input($code) . "'");


La query non tiene conto di una caratteristica della select di MySQL che, a differenza di Oracle, è case insensitive, cioè non distingue frà maiuscole e minuscole.
Questo fa si che in presenza, ad es, del codice di valuta USD, anche il codice Usd o usd, risulta rilevato dalla query.

D'altra parte il PHP è case sensitive, quindi il codice valuta risulta inesistente e, conseguentemente, il valore rispetto alla valuta di default risulta zero.

Il fix corretto a questo bug consiste nel modificare la query in modo da tener conto del case del codice valuta, aggiungendo la parola chiave "binary":

Codice: Seleziona tutto

function tep_currency_exists($code) {
   $code = tep_db_prepare_input($code);

   $currency_code = tep_db_query("select currencies_id from " . TABLE_CURRENCIES . " where binary code = '" . tep_db_input($code) . "'");
   if (tep_db_num_rows($currency_code)) {
      return $code;
   } else {
      return false;
   }
}


La soluzione proposta in origine non risolve completamente il problema. Se ad es il codice della valuta dollaro viene inserito dal merchant erroneamente in minuscolo (usd), il problema si ripresenta.

Saluti
Marcus
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Rispondi