TOPIC CALDO ! [sicurezza in oscommerce]

Questo forum è dedicato alle discussioni riguardanti le contribution per osCommerce

Moderatore: mod Generali

Rispondi
maury2ma
membro Master
membro Master
Messaggi: 1669
Iscritto il: 10/02/2006, 14:04
Contatta:

TOPIC CALDO ! [sicurezza in oscommerce]

Messaggio da maury2ma »

ebbene oggi leggendo una rivista 'mi pare linux magazine',
ho letto dell'ennesima carenza di sicurezza in oscommerce.
ora vi chiedo : vi va di postare un elenco di contrib "fondamentali per la sicurezza" del nostro sito ? (compresa spam)

ecco un inizio :

never orders at value zero (versione semplice per evitere il cambio di valuta)
http://www.oscommerce.com/community/contributions,4573
Sanitize modified for general.php (per evitare iniezioni di codice all'interno delle text area)
http://www.oscommerce.com/community/contributions,4232
Prefisso alle tabelle (sempre per evitare attacchi di iniezioni sql su tabelle "standard")
http://www.oscommerce.com/community/contributions,3214

registrazione con e-mail di conferma,
registrazione con antirobot per evitare spam,
contattaci e consiglia ad un amico con anti robot per lo spam

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

Re: TOPIC CALDO ! [sicurezza in oscommerce]

Messaggio da marcus »

maury2ma ha scritto: never orders at value zero (versione semplice per evitere il cambio di valuta)
http://www.oscommerce.com/community/contributions,4573
Si tratta di un bug critico in quanto teoricamente è possibile acquistare beni digitali a costo zero.

La soluzione proposta nel link 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.

Il bug effettivo 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. Questo fa si che se è presente, ad es, il 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;
	}
}

Saluti
Marcus
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
maury2ma
membro Master
membro Master
Messaggi: 1669
Iscritto il: 10/02/2006, 14:04
Contatta:

Messaggio da maury2ma »

corretto.
sai percaso di come fare per evitare attacchi croos-site ?
http://www.securityfocus.com/bid/20343

ho trovato qualcosa per le iniezioni sql, ma per i cross-site nulla.

secondo te inplementare la sicurezza con wasp
http://savannah.nongnu.org/projects/wasp/

esattamente inserendo il file php_sec.php
nella cartella includes
e poi modificando application_top.php
aggiungendo in cima :

Codice: Seleziona tutto

<?php
/*
  $Id: application_top.php,v 1.280 2003/07/12 09:38:07 hpdl Exp $

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

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

// start the timer for the page parse time log
  define('PAGE_PARSE_START_TIME', microtime());

// BOF include protection sql injection
include("includes/php_sec.php");

    if (sec_paranoid_check_all_params() == true)
    {
        die("
        <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
        <html>  <head>
        <title>ERROR</title>
        <meta content=\"\"/>
        <meta http-equiv=\"Refresh\"content=\"0;URL=/index.php\"/>
        </head>
        <body></body>
        </html>
        ");
    }
// EOF protection
e' superfluo oppure no ?

qualcuno sa fare iniezioni sql per sapere se con il wasp e' piu' sicuro ?
maury2ma
membro Master
membro Master
Messaggi: 1669
Iscritto il: 10/02/2006, 14:04
Contatta:

Messaggio da maury2ma »

mi rispondo da solo : troppo lavoro per configurarlo.
ogni pagina deve gestire tutte le variabili possibili e quelle "impossibili"
Rispondi